【发布时间】:2021-10-26 10:25:14
【问题描述】:
尝试在 Verilog 中实现频率计数器。 我需要的是一个时钟输入、一个计数输出和一个复位输入。 行为应该是这样的:
- 内部 reg 或线变量对应用于时钟输入的时钟脉冲进行计数
- 每当一个复位脉冲到来时,它应该将计数值传送到输出中,直到下一个时钟脉冲到来,并复位内部变量。
下面给出一个简单的代码:
module counter(
input rst,
input clk,
output [31:0] countout
//output [31:0] count
);
wire rst;
wire clk;
reg [31:0] countout=0;
reg [31:0] count=0;
always @ (posedge clk)
begin
count = count + 1'b1;
end
always @ ( posedge rst )
begin
countout = count;
end
always @ ( negedge rst )
begin
count = 0;
end
endmodule
但是,Vivado 不允许这样做,因为计数变量是一个多驱动网络。显然,count 不能在 2 个不同的 always 块中更改。你知道我该如何实现吗?谢谢。
【问题讨论】: