Verilog里面如何初始化数组才能被Quartus II综合?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog里面如何初始化数组才能被Quartus II综合?相关的知识,希望对你有一定的参考价值。

Verilog里面如何初始化数组才能被Quartus II综合?
比如我有一个常数数组
reg [8:0] conval [15:0];
conval的值在系统运行中不变的,quartus不支持initial语句,那我如何对conval赋初值?

reg [7:0] conval[15:0]表示定义(或者叫声明)了一个名为conval的存储器,该存储器一共包含16个寄存器,每个寄存器可以存储一个8位的二进制数。

在verilog中,每次只能对存储器中的某个寄存器赋值,不能一次性对整个存储器赋值。
例如你可以写conval[9]<=8'hff,但不能写conval[15:0]<=……
所以,楼主如果真要给存储器conval赋初值,也只能一个寄存器一个寄存器地赋了。

另外需要再说明的是:verilog不支持对存储器进行位访问(或者叫位寻址)。
例如你写Medied<=conval[9][3],是不对的。
——Medied.Lee
参考技术A 一般的综合如果不在意上电时的值,编译器会向着面积最小的方向综合,那样综合后信号的初始值是不确定的。
module test(
input wire rst_n // Reset, Active Low
,input wire clk
//
// Add other inputs and outputs here
//
);
integer k;
parameter n = 10; // set the value of n here
reg signed [20:0] e[0:n-1];
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin
for(k=0;k<n;k=k+1) e[k] <= 21'h0; // set initial value of matrix to all zero here
end
else begin
// change the value of e here normally
end
end

endmodule
参考技术B always@(negedge rst)
begin

if(!rst)

conval=16'hXXXX;
..........

end
参考技术C 用parameter进行初始化 参考技术D 复位时候赋初值本回答被提问者采纳

以上是关于Verilog里面如何初始化数组才能被Quartus II综合?的主要内容,如果未能解决你的问题,请参考以下文章

freemarker里面用assign标签定义数组可以动态赋值吗

verilog 二维数组是如何初始化的啊?

verilog 怎么给二维数组赋值

verilog如何给数组赋值

verilog HDL状态机 赋初值问题

verilog中多次调用一个module实例