题解 | #多功能数据处理器#
多功能数据处理器
http://www.nowcoder.com/practice/e009ab1a7a4c46fb9042c09c77ee27b8
有符号数,输入8-bit,输出9-bit,最好是手动扩展符号位再输出,加、减操作时也是手动扩展符号位再加减。
// Verilog 使用位拼接,扩展符号位
// 作者:FPGA探索者
`timescale 1ns/1ns
module data_select(
input clk,
input rst_n,
input signed[7:0]a,
input signed[7:0]b,
input [1:0]select,
output reg signed [8:0]c
);
always @ (posedge clk or negedge rst_n)
begin
if( ~rst_n ) begin
c <= 9'b0;
end
else begin
case ( select )
2'b00 : begin
c <= {a[7], a};
end
2'b01 : begin
c <= {b[7], b};
end
2'b10 : begin
c <= {a[7], a} + {b[7], b};
end
2'b11 : begin
c <= {a[7], a} - {b[7], b};
end
default : begin
c <= 9'b0;
end
endcase
end
end
endmodule