题解 | 基础版06#多功能数据处理器#

多功能数据处理器

http://www.nowcoder.com/practice/e009ab1a7a4c46fb9042c09c77ee27b8

本题目虽然简单,但是值得探究有符号数和无符号数问题,笔试面试和实际项目常见的问题,建议学习。

1. 题目

根据指示信号select的不同,对输入信号a,b实现不同的运算。输入信号a、b为8bit有符号数,

当select[1;0] =0,输出a;

当select[1;0] =1,输出b;

当select[1;0] =2,输出a+b;

当select[1;0] =3,输出a-b。

 

2. 解析

本题目比较简单,但是还是有一些值得注意的点,中间改动一些东西可能就会出错。因为输入输出都已经直接定义了signed有符号数类型,所以直接相加、相减也没有问题,不会出现运算错误。

有符号数+有符号数=有符号数

 

这其中,如果加数中有无符号数,那么就会按照无符号运算。

如果表达式中有一个无符号数,则所有的操作数都会被强行转换为无符号数;

 

即:有符号A +无符号B时,会将补码表示的有符号A当成无符号数A1,,再计算A1+B,这样得到的结果就是错的了。

 

两种解决方法:

(1)涉及到有符号数运算时,和有符号相关的输入、输出、中间变量均定义成signed有符号数,这样全部遵循有符号数运算规则;

(2)用位拼接符补齐符号位;

 

3. 代码

`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&nbs***bsp;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


全部评论
c <= {a[7], a};的话,那么a的符号位在c就出现两次了,一个是c的符号位,一个是除符号位以外的最高位,这样不影响吗?
5 回复 分享
发布于 2022-10-19 11:28 江苏
您提交的代码无法完成编译 main.v:23: error: can not select part of scalar: a main.v:28: error: can not select part of scalar: b main.v:33: error: can not select part of scalar: a main.v:33: error: can not select part of scalar: b main.v:38: error: can not select part of scalar: a main.v:38: error: can not select part of scalar: b 6 error(s) during elaboration. 建议自己跑一遍再发出来。
点赞 回复 分享
发布于 2023-05-04 23:05 湖北
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-27 11:35

相关推荐

不愿透露姓名的神秘牛友
05-29 20:12
点赞 评论 收藏
分享
评论
36
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务