微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog中一个关于赋值的问题

verilog中一个关于赋值的问题

时间:10-02 整理:3721RD 点击:

  1. parameter [31:0] dat [0:instructions-1] = {
  2.   32'h0,
  3.   32'h0,
  4.   32'h0,
  5.   32'h12345678,
  6.   32'h0,
  7.   32'h0,
  8.   32'h0,
  9.   32'h0,
  10.   32'h0,
  11.   32'h0,
  12.   32'h00010002,
  13.   32'h00030004,
  14.   32'ha1050006,
  15.   32'h00070008,
  16.   32'h0,
  17.   32'h0,
  18.   32'hdeaddead,
  19.   32'h55555555,
  20.   32'ha1050006,
  21.   32'h00070008,
  22.   32'h00010002,
  23.   32'h00030004,
  24.   32'h0,
  25.   32'h0,
  26.   32'h0,
  27.   32'h0,
  28.   32'h0,
  29.   32'h0,
  30.   32'h0,
  31.   32'h0,
  32.   32'h0,
  33.   32'h0
  34.   };

复制代码


Illegal assignment to type 'reg[31:0] $[0:instructions-1]' from type 'reg[1023:0]': Cannot assign a packed type to an unpacked type.
有人知道这个问题怎么回事吗?

{}的意思是把{}内所有数据连接起来变成1个数据,你这里就得到一个1024位的数据。
而你等号左边是1个2维数组,vcs不知道怎么把1个数据变成1个2维数组。

想对memory赋初值,直接$readmemh不更好?

verilog中不能那样定义。而应该这样:
parameter [0:1023] dat = {......};
dat[32*N : 32*N+31]就是第N个DWORD类型的值。并且,要确保那个1023与{}中值的个数是匹配的。当然也可以定义为 parameter [1023:0] dat......

这个就是典型的软件思路写法

贴主弄错了数组和拼接赋值两者的含义

小编以前写软件的吧....
{}是拼接符~看看语法

这是SystemVerilog的特性,在编译仿真的时候加上对SystemVerilog的支持;

我觉得不能对两个reg型变量赋值,你可以把期中一个改成输出变量或是别的变量类型试试

用-sv试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top