我试图在 verilog 中制作一个简单的微处理器,作为同时理解 verilog 和汇编的一种方式。
我不确定我是否很好地实现了我对微处理器的看法,或者我是否完全错了。我应该简化微处理器的想法,还是应该像使用真正的芯片一样对其进行编程。例如,我是否应该定义一个名为 address 的变量并创建一个大case语句,该语句接受汇编命令并对内存和地址进行处理。到目前为止,我已经做了类似的事情。
case (CMD_op)
//NOP
4'b0000: nxt_addr = addr + 4'b0001 ;
//ADD
4'b0001: begin
op3_r = op1_r + op2_r;
nxt_addr = addr + 4'b0001;
end
Run Code Online (Sandbox Code Playgroud)
CMD_op 是一个 4 位输入,它指的是我在上面添加的 case 语句中的一组预定义的 16 个命令,这只是前两种情况,我为每个命令以及它如何篡改地址做了一个 case。我有一个 16 位 x 16 位的数组来保存主程序。每行的前 4 位指的是汇编命令,接下来的 12 位指的是命令的参数。
例如这里是无条件跳转命令 JMP
//JMP
4'b0101: nxt_addr = op1_r ;
Run Code Online (Sandbox Code Playgroud)
这4'b0101是命令的 case 语句中的一个 case。
我问这个问题的原因是因为我觉得我在模拟一个微处理器而不是制造一个微处理器,我觉得我只是在模拟特定的汇编命令会对微处理器内部的内部寄存器做些什么。我没有公共汽车,但是如果我可以使用 Verilog 跳过它的使用,公共汽车会做什么。
感觉少了点什么,谢谢。