verilog - Verilog 中的 10:1024 位解码器
问题描述
我尝试使用行为建模在具有适当测试台的 Verilog 中实现 10:1024 位解码器。代码如下所示。
module decoder(input [9:0]address,output reg [1023:0]add);
reg [9:0]i;
always@(address) begin
for(i=0;i<1024;i=i+1) begin
add[i]=(address==i)?1'b1:1'b0;
end
end
endmodule
module tg(output reg [9:0]address,input [1023:0]add);
initial begin
$monitor($time,,,,"address=%b add=%b",address,add);
address=1023;
#2 address=0;
#2 address=1;
#2 $finish;
end
endmodule
module wb;
wire [9:0]a;
wire [1023:0]b;
decoder d1(a,b);
tg tg_1(a,b);
endmodule
但是在编译后运行代码时没有看到 o/p...帮我修复此代码以实现 10:1024 位解码器...
解决方案
由于您声明i
为reg [9:0]i;
,因此以下内容永远不会成立:i == 1024
。在 1023 之后,'i' 将溢出并再次变为 '0'。
所以,你的循环永远不会退出。
for(i=0;i<1024;i=i+1) begin // will always be less than 1024
add[i]=(address==i)?1'b1:1'b0;
end
要么将其设置为,要么将其reg [10:0]
声明为integer
.
integer i; // <<<
always@(address) begin
for(i=0;i<1024;i=i+1) begin
add[i]=(address==i)?1'b1:1'b0;
end
end
推荐阅读
- c# - 在 WPF / Regex 中读取 Application.Current.Properties 的整数
- java - 如何删除 Codenameone 上表单中的所有组件?
- caching - 如何在redis中存储一个空数组?
- apache-spark - 在 pyspark 数据框中读取雪花表时,列名用双引号读取?
- javascript - 在一天中的设定时间向页面显示警报
- java - 将 VSCode 构建设置设置为 Eclipse 的 java 项目?
- point-cloud-library - 用于完整体素化的 PCL OctreePointCloud*** 功能
- sql - 如何在 SQL 中为每个出现的事件添加一个数字
- snowflake-cloud-data-platform - “雪花数据云”是云原生事务应用程序数据存储的好选择吗?
- python - 为什么我在尝试使用 ffmpeg 分割视频时会得到额外的帧