hdlbits系列(1) find bugs in code
这是我的第一篇文章,一定要坚持下去,想想过去内心浮躁的不成样子,不知道自己做些什么,什么都想学,最后的结果就是什么也学不会,还不如静下心来好好做一件事情,hdlbits真的是一个超级好的网站,废话不多说下面进行第一篇博客的分享。
目录
原题目重现
代码书写
测试与分析
原题目重现
代码书写
这道题的错误在于输出位宽与输入定义不一致,错误输出如下
当输入与输出位宽不符合的时候,输出呈现高阻态,高阻态可以理解为什么也没接,常用于一个总线挂有多个设备,因此需要重新定义输出位宽。
经过测试成功。
代码书写
代码书写
多路选择器有多种实现方式,这只是其中一种,后续文章将会更新,在数字设计基础教程中,经过测试后成功。
正常case endcase中要有default语句,避免生成锁存器,由于题目中输入确定因此省略了default选项。
module top_module (
input [7:0] code,
output reg [3:0] out,
output reg valid=1);//
always @(*)
case (code)
8'h45:
begin
out = 0;
valid=1;
end
8'h16:
begin
out = 1;
valid=1;
end
8'h1e:
begin
out = 2;
valid=1;
end
8'h26:
begin
out = 3;
valid=1;
end
8'h25:
begin
out = 4;
valid=1;
end
8'h2e:
begin
out = 5;
valid=1;
end
8'h36:
begin
out = 6;
valid=1;
end
8'h3d:
begin
out = 7;
valid=1;
end
8'h3e:
begin
out = 8;
valid=1;
end
8'h46:
begin
out = 9;
valid=1;
end
default:
begin
out=0;
valid=0;
end
endcase
endmodule
分析:这道题的问题在于输出不能直接给初值,如果直接在输出给值无法传递和保持,若改成reg valid=1’b1,则会报错,因为输出不能重新被定义或声明,写成output reg valid=1’b1;没有语法错误,若写成output valid,reg valid=1’b1;则会出现上述问题,上述代码测试成功。
下一节更新build large circuit