verilog 问题,在线等
发布网友
发布时间:2022-05-22 08:03
我来回答
共1个回答
热心网友
时间:2023-09-07 18:51
以下仅个人看法,供参考!
mole exe1(out, d3, d2,d1,d0, s1,s0); //这是用门级结构来实现 非、与、或功能的代码
output out3, out2, out1, out0;
input d3,d2,d1,d0, s1,s0;
not(not_s1,s1), (not_s0,s0); //非结构
and (out0,d0, not_s1, not_s0), (out1, d1, not_s1, s0);
and (out2,d2, s1, not_s0), (out3, d3, s1, s0); //与结构
or (out,out0, out1, out2, out3);/ /或结构
endmole
mole exe2(fd_out, clk, d, clr); //这部分代码你给的比较乱,我个人整理了一下,没有编译
//如果有错请海涵!整体来说就是一个减计数器
output fd_out;
reg fd_out;
input[15:0] d;
input clk,clr;
reg [15:0]cnt;
always@(posedge clk)
begin
if (!clr)
begin
cnt <= 4'h0000; //清零信号有效则清零
end
else if(cnt==0) //当计数到零时,置位为d
begin
cnt <= d;
end
else
begin
cnt<=cnt-1; // 计数减一
end
end
always@(posedge clk)
begin
if (cnt==0)
fd_out <= 1; //计数为零时,输出信号为1
else
fd_out <= 0; //否则输出为零
end
endmole
mole exe3(op_result, func_sel, op_a, op_b); //实现加减乘除与 或 异或 同或功能
output[7:0] op_result;
input [2:0]func_sel;
input [3:0]op_a, op_b;
reg [7:0] op_result;
always @(func_sel or op_a or op_b)
begin
case (func_sel) // case语句与c语言类似
3'b000: op_result<= op_a + op_b;
3'b001: op_result<= op_a - op_b;
3'b010: op_result<= op_a * op_b;
3'b011: op_result<= op_a / op_b;
3'b100: op_result<= op_a & op_b;
3'b101: op_result <= op_a | op_b;
3'b110: op_result<= op_a ^ op_b;
3'b111: op_result<= op_a ~^ op_b;
endcase
end
endmole