题解 | #多功能数据处理器#

多功能数据处理器

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
全部评论
手动扩展符号位会不会对结果造成影响?
点赞 回复 分享
发布于 2022-06-06 20:38
为什么会影响
点赞 回复 分享
发布于 2022-06-06 21:20
这代码风格 我好喜欢
点赞 回复 分享
发布于 2022-08-25 15:28 四川
既然已经声明是signed类型了,为什么还要手动扩展符号位?是双保险还是多此一举?
点赞 回复 分享
发布于 2023-08-04 17:53 湖北

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
10
收藏
分享
牛客网
牛客企业服务