远程FPGA虚拟实验平台用SystemVerilog HDL实现多功能运算器
前言:本次实验只要提交任务二的rbf和sv,所以本文只讲参考材料和任务二的内容,任务一的内容有空再补充
原理
参考材料
一个简单的加减运算电路,减法采用了补码的形式进行计算。
任务二·多功能运算电路
按这个表格来算,这里带借位减法需要做到Cin=1时有借位,也就是X和~Y相加后不再加一;而带进位加法需要做到Cin=1时有进位,也就是X和Y相加后再加一。
但事实上带借位减法Cin的借位是反一反的,真讨厌。
控制信号总结在图里了,大致就这样。这次难点也不是代码(因为我一位位地与运算过去了,我真是个小机灵鬼)。
源代码
参考材料
VirtalBoard模块
/** The input port is replaced with an internal signal **/
wire M = S[9];
wire [3:0] X = S[7:4];
wire [3:0] Y = S[3:0];
/************* The logic of this experiment *************/
wire [3:0] A,B,F;
wire C0;//进位符号,在这个简单的电路里只用在做减法的时候给反码加一
wire sign, zero, overflow, carryOut;//四个标志
assign A = X;
assign B = Y ^ {
4{
M}};//即Y与{M,M,M,M}异或
assign C0 = M;
assign {
carryOut,F[3:0]} = A + B + C0; //carryout的进/借位标志就在这里赋值
assign sign = F[3];//如果把电路的数当作有符号数,这就是符号位
assign zero = (F==0) ? 1 : 0; // ~|F;
assign overflow = (~A[3]) & ~B[3] & F[3] | (A[3]) & B[3] &