首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在Verilog中将一个文件分成四个部分(跨越四个内存)吗?

我可以在Verilog中将一个文件分成四个部分(跨越四个内存)吗?
EN

Stack Overflow用户
提问于 2012-01-24 20:53:26
回答 1查看 976关注 0票数 0

请原谅新手,我甚至不知道如何正确地问这个问题:

我有一个当前加载到内存库的文件,我想将它拆分到四个不同的内存库中。

我有一些系统verilog代码,它使用的代码行非常如下:

代码语言:javascript
复制
$readmemh(mem_file, memories.ram);

将一个十六进制文件(假设它有65536字节长)读入一些内存。

现在我想将内存分成四个部分,并将第一个四分之一(16384字节)放入一个块,将第二个四分之一放入另一个块,依此类推……

一种显而易见的方法是使用head、tail等拆分十六进制文件,将其作为构建过程的一部分,然后在模拟时传入所有新文件名,并使用如下语句

代码语言:javascript
复制
$readmemh(mem_file_1stbit, memories.ram1);
$readmemh(mem_file_2ndbit, memories.ram2);
$readmemh(mem_file_3rdbit, memories.ram3);
$readmemh(mem_file_4thbit, memories.ram4);

但是对于我来说,固件构建过程、模拟脚本和verilog设计之间的耦合似乎太多了。

一个更好的解决方案(在我看来)是修改verilog代码,使其如下所示:

代码语言:javascript
复制
$readmemh(mem_file, memories.ram1, 0,       (1<<14)-1);
$readmemh(mem_file, memories.ram2, (1<<14), (2<<14)-1);
$readmemh(mem_file, memories.ram3, (2<<14), (3<<14)-1);
$readmemh(mem_file, memories.ram4, (3<<14), (4<<14)-1);

但看起来verilog不会让我做这类事情。

有没有人能想出一个简洁的结构来达到同样的效果呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-25 00:54:32

这个小片段似乎可以做这件事。它确实引入了一种中间负载的东西,我更希望这些东西最终不会被合成。

我会用这类东西。如果任何真正知道自己在做什么的人想告诉我为什么这是一个坏主意,我将非常感激。

代码语言:javascript
复制
   reg [8:0] data [0:15];
   reg [8:0] data1 [0:7];
   reg [8:0] data2 [0:7];

   integer   i;

   initial begin
      $readmemh("data.hex", data);
      for(i=0; i<16; i=i+1) 
        $display("%d:%h",i,data[i]);
      for(i=0; i<8; i=i+1)
        begin
           data1[i]=data[i];
           data2[i]=data[i+8];
        end
   end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8987134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档