繁体   English   中英

如何将计数器的值初始化为先前计算的值

[英]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_incoffset_phase_inc 它可以正确执行此操作。 然后,我想在always块的if语句中初始化4个计数器变量。 想法是让计数器以等于第一部分中计算出的值的偏移量开头。 但是,在模拟中,只有变量cos_addr会在每个正时钟沿被初始化并正确递增。 我的问题是,为什么cos_addr变量成功初始化,而其他计数器却没有初始化?我如何更改代码以正确初始化它们?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM