例如,我没有使用reg [3:0] RAM [0:31];
,而是让我自己的模块尝试使用硬连线的FlipFlopMod。
这就是我要做的事情(但你会发现它显然不起作用):
module mem_mod(addr, mem_out);
input [4:0] addr; // 5-bit addr bus
output [3:0] mem_out; // 4-bit inst/data out
// a real flip flop instead of using reg.
FlipFlopMod_4bit RAM [0:31] (1/*enabled*/, 4'b1111, q, nq); // # of nibbles
assign mem_out = RAM[addr]; // change this to an AND selector.
// read binary code into RAM, prepare inst.txt 1st
initial $readmemb("inst.txt", RAM);
endmodule
// Gated Flip Flop
module FlipFlopMod_1bit(clk, d, q, nq);
input clk, d;
output q, nq;
wire and0, and1, d_inv;
not(d_inv, d); // d and d_inv are someties referred to as R and S, respectively.
// these two and gates cause the input to be latched only when clk
// (enable) is high.
and(and0, d, clk);
and(and1, clk, d_inv);
// These nor gates are the actual flipflop/latch.
nor(nq, and0, q);
nor(q, nq, and1);
endmodule
// 4 bit gated flip flop made using 1 bit gated flip flops.
module FlipFlopMod_4bit(clk, d, q, nq);
input clk;
input [3:0] d;
output [3:0] q, nq;
FlipFlopMod_1bit latch3 (clk, d[3], q[3], nq[3]);
FlipFlopMod_1bit latch2 (clk, d[2], q[2], nq[2]);
FlipFlopMod_1bit latch1 (clk, d[1], q[1], nq[1]);
FlipFlopMod_1bit latch0 (clk, d[0], q[0], nq[0]);
endmodule
这是我开始的地方,使用reg
(这有效):
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
正如您所看到的,我不太确定如何从文件中读取每个4位数据到我的自定义FlipFlops数组中,以便我的每个FlipFlops都保存不同的值,例如reg
例。我想我可能只需硬编码32个触发器,并硬编码每个参数中的值而不是读取文件,但这并不好玩!
我正在读取的文件(inst.txt)如下所示:
0001
0011
1000
0011
...
...
... etc, 32 lines total.
答案 0 :(得分:1)
您是否正在尝试进行合成或模拟?一个简单的黑客就是使用$ fscanf并拥有一些初始化代码,这些代码遍历文件,将文件中的一行复制到各种触发器中。当然,对于合成,这是行不通的。我可以问你为什么不想只使用reg?