[英]How to initialise the value of a counter to a previously calculated value
嗨,我是Verilog的新手,我正在尝试将计数器的初始值设置为先前计算的值(非零),然后使用下面的代码在每个正时钟沿将其递增。
wire [63:0] frq_offset;
wire [15:0] phase_inc, offset_phase_inc;
reg [15:0] sin_addr,cos_addr;
reg [15:0] sin_addr2,cos_addr2;
reg rst = 1'b1;
// Calculate offset
`define FRQ_OFFSET_COEFF 32800
assign frq_offset = `FRQ_OFFSET_COEFF * frq * 43980;
assign phase_inc = frq_offset >> 42;
assign offset_phase_inc = phase_inc >> 1;
always @(posedge clka) begin
if (rst) begin
// Initialise values
sin_addr <= 16'd0;
sin_addr2 <= offset_phase_inc;
cos_addr <= 16'd16384;
cos_addr2 <= cos_addr2 + offset_phase_inc;
rst <= 1'b0;
end
else
// Increment values on pos edge of aclk
cos_addr <= cos_addr + phase_inc;
sin_addr <= sin_addr + phase_inc;
cos_addr2 <= cos_addr2 + phase_inc;
sin_addr2 <= sin_addr2 + phase_inc;
end
第一部分采用变量frq
并将其传递到函数(未显示)中,并计算两个值phase_inc
和offset_phase_inc
。 它可以正确执行此操作。 然后,我想在always
块的if语句中初始化4个计数器变量。 想法是让计数器以等于第一部分中计算出的值的偏移量开头。 但是,在模拟中,只有变量cos_addr
会在每个正时钟沿被初始化并正确递增。 我的问题是,为什么cos_addr
变量成功初始化,而其他计数器却没有初始化?我如何更改代码以正确初始化它们?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.