描述
根据指示信号select的不同,对输入信号a,b实现不同的运算。输入信号a,b为8bit有符号数,当select信号为0,输出a;当select信号为1,输出b;当select信号为2,输出a+b;当select信号为3,输出a-b.
接口信号图如下:
输入描述:
clk:系统时钟
rst_n:复位信号,低电平有效
a,b:8bit位宽的有符号数
select:2bit位宽的无符号数
输出描述:
c:9bit位宽的有符号数
解答:
分析:
根据不同的select选择不同的处理结果。需要注意加减是有符号的,需要注意符号。因此将运算的数据全部定义为signed即可避免这个问题。
代码如下:
`timescale 1ns/1ns
module data_select(
input logic clk,
input logic rst_n,
input logic signed[7:0]a,
input logic signed[7:0]b,
input logic [1:0]select,
output logic signed [8:0]c
);
always@(posedge clk or negedge rst_n) begin
if (!rst_n) begin
c <= 'b0;
end else begin
case(select)
'd0:begin
c <= a;
end
'd1: begin
c <= b;
end
'd2: begin
c <= a+b;
end
'd3: begin
c <= a-b;
end
default:begin
c <='d0;
end
endcase
end
end
endmodule