Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 如何像readmemb一样,将文件送入由自定义模块(无reg)生成的内存?_Memory_Verilog_System Verilog_Flip Flop - Fatal编程技术网

Memory 如何像readmemb一样,将文件送入由自定义模块(无reg)生成的内存?

Memory 如何像readmemb一样,将文件送入由自定义模块(无reg)生成的内存?,memory,verilog,system-verilog,flip-flop,Memory,Verilog,System Verilog,Flip Flop,例如,不使用reg[3:0]RAM[0:31]我制作了自己的模块,试图使用硬连线的FlipFlopMod 这就是我想做的(但你会发现它显然不起作用): 这就是我的出发点,使用reg(这很有效): 如您所见,我不太确定如何将文件中的每个4位数据读取到自定义触发器数组中,以便每个触发器都保存不同的值,如reg示例。我想我可能只需要硬编码32个触发器,然后硬编码每个参数中的值,而不是读取文件,但这并不有趣 我从中读取的文件(inst.txt)如下所示: 0001 0011 1000 0011 ...

例如,不使用
reg[3:0]RAM[0:31]我制作了自己的模块,试图使用硬连线的FlipFlopMod

这就是我想做的(但你会发现它显然不起作用):

这就是我的出发点,使用
reg
(这很有效):

如您所见,我不太确定如何将文件中的每个4位数据读取到自定义触发器数组中,以便每个触发器都保存不同的值,如
reg
示例。我想我可能只需要硬编码32个触发器,然后硬编码每个参数中的值,而不是读取文件,但这并不有趣

我从中读取的文件(inst.txt)如下所示:

0001
0011
1000
0011
...
...
... etc, 32 lines total.

你是在做合成还是模拟?一个简单的破解方法是使用$fscanf,并使用一些初始化代码迭代文件,将文件中的一行复制到各种触发器中。当然,对于合成来说,这是行不通的。我可以问一下,为什么您不想只使用reg?

合成和模拟之间有什么区别?我希望只使用最基本的组件(如and、or、nand等)来实现所有功能。你能提供一个像你描述的那样的fscanf例子吗?Verilog(和其他HDL)为你提供了编写不可合成代码的能力。这段代码不是合成成硬件的——它只用于模拟(例如,测试合成的代码)。一般来说,对于您编写的verilog的每个模块,您应该编写第二个模块,用于测试第一个模块。在测试台模块中,为了便于测试模块,您可以使用未合成到门的代码。关于您希望使用“最基本的组件”的愿望,我无意指出,这可能是误导。首先,合成工具将获取您的代码,并以他们认为适合给定底层硬件的方式对其进行合成。这并不是说通过实例化一个与门,你实际上会得到一个与门(至少不是在fpga或cpld上)。底层fpga结构由查找表组成,查找表可以创建逻辑功能,但实际上您并没有得到所需的cmos门(除非这是针对asic的)。这说明您可能应该遵守规则……您更可能不会出错,并且您允许合成工具“随心所欲”也就是说,您可以从一个fpga切换到另一个fpga,并保持相同的HDL。无论如何,这里有一个使用$fscanf初始化某些东西的示例:
integer文件,i,j;注册[15:0]我的注册;初始开始文件=$fopen(“../some_file_path/file.txt”,“r”);对于(i=0;i
module mem_mod(addr, mem_out);
   input [4:0] addr;        // 5-bit addr bus
   output [3:0] mem_out;    // 4-bit inst/data out

   reg [3:0] RAM [0:31];    // # of nibbles

   assign mem_out = RAM[addr];

   // read binary code into RAM, prepare inst.txt 1st
   initial $readmemb("inst.txt", RAM);
endmodule
0001
0011
1000
0011
...
...
... etc, 32 lines total.