记录错误:vivado计数器一直X态(clkreset 和 datareset )

记录错误:vivado计数器一直X态

错误代码:
always @ (posedge clk )begin
if (reset)begin
clk_div2<=1’b0;
end else begin
clk_div2<= ~clk_div2;
end
end

always @(posedge clk_div2) begin
if(reset ==1)begin
write_addr<=0;
end else begin
write_addr<=write_addr+1;
end
end

错误表现:
write_addr一直是X态,数据流如下(clk即上文的clk_div2)
在这里插入图片描述
错误分析:reset先失效,但此时clk的上升沿没有来临,所以write_addr的初始值没有起来。
错误借鉴意义:clkreset 不应该和 datareset 是同一个信号,且clkreset应该先失效,保证clk先准备好!

正确代码:
always @ (posedge clk )begin
clk_div2<= ~clk_div2;
end

always @(posedge clk_div2) begin
if(reset ==1)begin
write_addr<=0;
end else begin
write_addr<=write_addr+1;
end
end
正确的数据流:(clk即上文的clk_div2)
在这里插入图片描述

Vivado中,可以使用Verilog HDL语言实现一个计数器。你可以创建一个名为"counter"的工程,并在该工程中创建一个名为"counter"的设计文件。在该设计文件中,你需要定义一个模块名为"counter",该模块包含时钟信号和复位信号作为输入,以及一个四位的输出用于计数。以下是一个示例的Verilog代码: ``` module counter( input clk, input rst, output reg out // 4位计数器 ); always @(posedge clk or posedge rst) begin if (rst) begin out <= 0; end else begin out <= out + 1; end end endmodule ``` 你还可以使用仿真设计代码来验证计数器的功能。以下是一个示例的仿真设计代码: ``` module counter_simulation(); reg clk; reg rst; wire [3:0 out; counter c(.clk(clk), .rst(rst), .out(out)); // 例化计数器模块 initial begin clk = 0; rst = 1; #10; rst = 0; end always #5 clk = ~clk; initial begin #200; // 仿真持续时间 $finish; end endmodule ``` 这段代码将实例化计数器模块,并对时钟和复位信号进行初始化,然后通过每隔5个时间单位改变一次时钟信号的值来模拟时钟信号的上升沿。仿真持续时间为200个时间单位。你可以使用这段代码来验证计数器的功能和正确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [FPGA Vivado环境下实现计数器](https://blog.csdn.net/qq_53632296/article/details/131350046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值