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

时间:2019-11-25 14:57:49

标签: verilog

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

0 个答案:

没有答案