本题目虽然简单,但是值得探究if...else仿真时的注意点,笔试遇到过,你不一定能答对哦~
1. 题目
根据输入信号a,b的大小关系,求解两个数的差值:输入信号a、b为8bit位宽的无符号数。
如果a>b,则输出a-b;
如果a≤b,则输出b-a。
2. 解析
if..else语句即可。关注点还是和第6题一样,有符号数问题。
2.1 if...else的注意要点
if...else的注意点:
if里只能判断条件是0还是1,如果出现X或者Z,则判断不出来。
答案:不一样!
(1)
对于
always @ (*)
begin
if(a == 1'b0)
b = 1'b0;
else
b = 1'b1;
end
当输入a是0时,b输出0,否则b输出1(否则的意思是只要不等于0!包括了x和z也是不等于0,不是只有1不等于0);
其他两种情况夏是一样的,if里面只能判断0和1,当出现x和z时到else里。
具体仿真图如下:
2.2等号运算符==和===的区别
有人要问了,如果直接判断if(a == 1’bx)或者if(a == 1’bz)呢?
当a = 1’bx时,if里的a==1’bx结果不为真!
这一部分又涉及到了两个等号==和三个等号===。
参考夏宇闻老师的书籍:
if(A==1’bx) $display(“AisX”); (当A等于X时,这个语句不执行)
if(A===1’bx) $display(“AisX”); (当A等于X时,这个语句执行)
3. 代码
`timescale 1ns/1ns module data_minus( input clk, input rst_n, input [7:0]a, input [7:0]b, output reg [8:0]c ); always @ (posedge clk&nbs***bsp;negedge rst_n) begin if( ~rst_n ) begin c <= 8'b0; end else begin if( a > b ) begin c <= a - b; end else begin c <= b - a; end end end endmodule
入职前空白期该如何度过?——作为应届生,我在入职前做了什么?https://www.nowcoder.com/discuss/936283?source_id=profile_create_nctrack&channel=-1