Verilog代码中负数表示

使用Verilog描述语言时,在编写含有负数判断的描述语言时,需要定义负数的数据类型。

一般的包含0以及0以上的正数寄存器只需声明 reg 即可;

用法:

reg  [x:0]   a;

reg寄存器是最常用的寄存器类型,这种寄存器中只能存放无符号数。如果给reg中存入一个负数,通常会被视为正数!
而对于是负数或者是存在负数的寄存器声明要使用 signed;

用法:

reg signed  [x:0] a;

示例:

正数的寄存器声明:

reg        [ 4:0]     seconds1_data; 		//秒钟低位数据寄存器1
reg        [ 4:0]     seconds1_data_n; 		//seconds1_data的下一个状态
reg        [ 4:0]     seconds2_data; 		//秒钟高位数据寄存器2
reg        [ 4:0]     seconds2_data_n; 		//seconds2_data的下一个状态
reg        [ 4:0]     minutes1_data; 		//分钟低位数据寄存器
reg        [ 4:0]     minutes1_data_n; 		//minutes1_data的下一个状态
reg        [ 4:0]     minutes2_data; 		//分钟高位数据寄存器
reg        [ 4:0]     minutes2_data_n; 		//minutes1_data的下一个状态

其对应的某一段控制数据变化的组合逻辑代码如下:

always @ (*)
begin
    if(time_seconds == SEC_TIME_1S | key_out[4] == 1'b1) 	//判断按键KEY5和判断1s时间
        seconds1_data_n = seconds1_data + 1'b1; 			//如果按键按下或者到达1s,seconds1_data将会加1
    else if(seconds1_data == 4'd10) 						//判断seconds1_data有没有达到10s
        seconds1_data_n = 1'b0; 							//如果seconds1_data到达10s,seconds1_data将会被清零
    else            
    	seconds1_data_n = seconds1_data; 					//否则seconds1_data将会保持不变
end

含有负数的寄存器声明:

reg signed[ 4:0]     seconds1_data;		//秒钟低位数据寄存器1
reg signed[ 4:0]     seconds1_data_n;	//seconds1_data的下一个状态
reg signed[ 4:0]     seconds2_data;		//秒钟高位数据寄存器2
reg signed[ 4:0]     seconds2_data_n;	//seconds2_data的下一个状态
reg signed[ 4:0]     minutes1_data;		//分钟低位数据寄存器
reg signed[ 4:0]     minutes1_data_n;	//minutes1_data的下一个状态
reg signed[ 4:0]     minutes2_data;		//分钟高位数据寄存器
reg signed[ 4:0]     minutes2_data_n;	//minutes1_data的下一个状态

其对应的某一段控制数据变化的组合逻辑代码如下:

always @ (*)
begin
    if(time_seconds == SEC_TIME_1S )			//判断1s时间
        seconds1_data_n = seconds1_data - 1'b1; //如果按键按下或者到达1s,seconds1_data将会减1
    else if(seconds1_data == -1'b1) 			//判断seconds1_data有没有达到-1s
        seconds1_data_n = 4'd9;					//如果seconds1_data到达-1s,seconds1_data将会被置9
    else if(timeup == 1'b0)						//如果计时器到0
       seconds1_data_n = 1'b0;					//0
    else            
    	seconds1_data_n = seconds1_data;		//否则seconds1_data将会保持不变
end

两者例子均是seconds1_data数据位变化,一个正向从1累加到9置零,一个反向从9递减到0置9

正向判断是加到了10归0;反向则是减到-1置9,此过程寄存器需要负数。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值