我是Verilog的新手。我正在设计一个LC-3(小型计算机)CPU。我设计了PC单元,控制单元(作为有限状态机),指令存储器,ALU单元和模块中的数据存储器。还有一个作为Main的Register File单元,模块调用在本单元中完成。
我希望程序在PCread为1时工作,从out
变量获取将分配给in
的变量,当PCwrite为1时,只需递增{{1}变量。 out
是发送到指令存储器的地址。
问题是当我模拟时,指令永远不会加载到指令存储器。因为PCwrite不适用于控制单元的第一个状态,因为我在第一个状态下重置了PCread和PCread变量。我这样做是因为我不想在一条指令完成它之前加载指令。我找不到办法解决这个问题。
我知道如果这个问题得到解决,处理器将会起作用,因为当我尝试使用带有初始化值的一条指令时,它会起作用。
任何帮助都会受到高度关注。
out
答案 0 :(得分:1)
始终将@*
用于组合逻辑的敏感度列表。变化:
always @(MemRead) begin
为:
always @* begin
您的always
阻止对AddrReg
中的更改不敏感。
答案 1 :(得分:0)
我发现解决此问题的一种方法是从PC单元向控制单元发送一个信号,指令地址通过输出reg变量发送到指令存储器,并检查控制单元中是否更改了该变量,如果是是,重置PCwrite变量。感谢所有人的帮助。