【问题标题】:How to create a data structure with depth 2kb and width of 32 bit in verilog?如何在verilog中创建深度为2kb、宽度为32位的数据结构?
【发布时间】:2023-03-24 01:03:01
【问题描述】:

如何在verilog或systemverilog中创建深度为2kb、宽度为32位的数据结构

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    如果你想要一个 4 字节字的 2KB 内存,你只需要这样声明:

    reg [31:0] mem [0:511]; // Or use logic instead of reg for the type in SystemVerilog

    这里的第一部分是类型和宽度(包括 31 到 0),然后是变量名 (mem),然后是内存大小(我假设您想要 KiB,而不仅仅是 KB,即 1024 而不是 100 )。

    要访问内存中的一个字,只需使用mem[addr] 格式。如果您希望内存可以按字节寻址,则必须做更多的工作或以不同的方式声明内存。

    【讨论】:

      【解决方案2】:

      @Unn 的答案对于静态数据或路由信号是正确的,但它缺少完整内存的控制信号。

      您需要将您的结构声明为reg [31:0] mem [511:0];(如 Unn 所述)。您还需要一些方法来更改数据。请注意,我翻转了内存大小的索引顺序(只是个人喜好)。

      如果你所有的数据结构同时发生变化,你可以使用如下:

      reg [31:0] mem [511:0];
      reg [31:0] mem_input [511:0];
      wire mem_we;
      integer i;
      always @(posedge clk) begin
          mem <= mem_we ? mem_input : mem ;
      end
      

      如果您只想更改部分数据,一种选择是允许在每个时钟周期更改每个 32 位字。这将需要更多路由,但允许并行更改数据。在这种情况下,您需要以下内容:

      reg [31:0] mem [511:0];
      reg [31:0] mem_input [511:0];
      wire [511:0] mem_we;
      integer i;
      always @(posedge clk) begin
          for (i=0; i<512; i=i+1)
              mem[i] <= mem_we[i] ? mem_input [i] : mem [i];
      end
      

      另一种选择是使用寻址来更改值。您一次只能更改一个 32 位字,但可以节省路由。

      reg [31:0] mem [511:0];
      reg [31:0] mem_input;
      wire [8:0] mem_addr;
      wire mem_we;
      integer i;
      always @(posedge clk) begin
          mem <= mem;
          if (mem_we) mem[mem_addr] <= mem_input;
      end
      

      mem_we 是内存“可写” - 断言它写入内存(在 1 和 3 中作为一个整体,或在 2 中按字)。
      mem_input 是输入(新值)到内存中。
      mem_addr 是要在 3 中更改的单词(0 到 511 之间的值)。

      【讨论】:

      • 好吧,操作只是要求数据结构,而不是整个实现;但是感谢您拼写出来:P 请注意,最后一个实现中的 mem &lt;= mem; 行(通常最接近您所拥有的)是不需要的,并且可能会减慢模拟速度(除非可能发生或可能不会发生的良好优化),mem 无论如何都会保留它的值,不需要重新分配。
      • 因此我引用了您的答案:P 我觉得我必须扩展的唯一原因是因为很多人认为单独声明 reg(没有任何其他逻辑)会让人记忆深刻。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多