Verilog刷题笔记59

题目:
Exams/m2014 q6c
Verilog刷题笔记59_第1张图片
解题:

module top_module (
    input [6:1] y,
    input w,
    output Y2,
    output Y4);
    assign Y2=y[1]&w==0;
    assign Y4=(y[2]&w==1)|(y[3]&w==1)|(y[5]&w==1)|(y[6]&w==1);

endmodule

结果正确:
Verilog刷题笔记59_第2张图片
注意点:
起初,我的代码有错误,代码如下:

module top_module (
    input [6:1] y,
    input w,
    output Y2,
    output Y4
);
    assign Y2 = y == 6'b000001 & w == 0;
    assign Y4 = (y == 6'b000010 & w == 1) |
                (y == 6'b000100 & w == 1) |
                (y == 6'b010000 & w == 1) |
                (y == 6'b100000 & w == 1);
endmodule

这个代码报错。
与正确的代码对比分析如下:
Y2 的定义:
错误代码:Y2 只在 y 为 6’b000001 并且 w 为 0 时为 1。
正确代码:Y2 只要 y 的第1位为 1 且 w 为 0 时为 1。
Y4 的定义:
错误代码:Y4 需要 y 为特定的四个值(6’b000010、6’b000100、6’b010000、6’b100000)中的一个,并且 w 为 1。
正确代码:Y4 只要 w 为 1,且 y 的第2、3、5或6位中有至少一位为 1 即为 1。
总结: 错误代码使用的是绝对值比较(y == 6’bXXXXXX),而正确代码使用的是位级逻辑操作(y[i] 和 y[x] | y[j]),这使得代码更具通用性且更容易理解。

你可能感兴趣的:(笔记)