您好,我是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
变量被成功初始化而其他计数器没有被初始化?我该如何更改代码以正确初始化它们?