题目描述:根据指示信号select的不同,对输入信号a,b实现不同的运算。输入信号a,b为8bit有符号数,当select信号为0,输出a;当select信号为1,输出b;当select信号为2,输出a+b;当select信号为3,输出a-b.
接口信号图如下:
总结:两种方法,可以通过自己设计枚举类型变量进行多路选择 (题目testbench不支持这样的形式测试用例通过~嘿嘿嘿不过是个不错的方式);第二就是用一般的多路选择器进行选择case语句进行,本题的就类似与一个单刀四置的多路选择器。
核心代码如下:
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
c <= 0;
end
else begin
case(select)
2'b00:begin c <= a; end
2'b01:begin c <= b; end
2'b10:begin c <= a+b; end
2'b11:begin c <= a-b; end
endcase
end
end
枚举方式的代码:
enum {ONE,TWO,THREE,FOUR) state_o;
stato_ c_out;
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
c <= 0;
end
else begin
case(c_out)
ONE:begin c <= a; end
TWO:begin c <= b; end
THREE:begin c <= a+b; end
FOUR:begin c <= a-b; end
endcase
end
end