远程FPGA虚拟实验平台用SystemVerilog HDL实现微程序控制器


我要去数学建模摸鱼了!所以早点摸完这次的实验!
呜呜呜经评论区大佬指点发现自己代码果然有错,详见uprogram.txt的mov部分。

原理

参考材料

这次和存储器一样也是直接套用参考材料,所以没有原理直接看实验内容。

实验内容

在这里插入图片描述
老规矩先看实验面板,主要就是通过理解①~③这三个值之间的关系来理解uAG、uAR、CM三个东西之间的关系。然后根据参考材料中给的virtualboard,uAG,uAR,ROM来看它们的实现方式并进行补充。只有uAG和ROM要补充。
uAG就是完成一个“根据CM给的BM和NA得到操作码OPCODE形成地址”的过程。
接下来编写ROM的uprogram.txt啦。
参考材料里给了@3F 10000000000000000,3F是6位地址的最后一位,拿来做初始非常的完美,然后注意这个txt中地址要从小到大写。
在这里插入图片描述
要把这些步骤拆分一下,主要举四个例子。
加法ADD:
在这里插入图片描述
右移:
在这里插入图片描述
赋值LD:
在这里插入图片描述
传送MOV:(原来那个错了!!!现在的是新的!!)
在这里插入图片描述

源代码

参考材料

VirtalBoard

从参考材料照搬到实验,下面放了去掉开头部分的代码。

/************** The declaration of signals **************/
wire reset;
wire clk;
wire [3:0] BUS, RX_Q, F, RF_Q, GRS_Q;
wire [3:0] FLAG, PSW_Q;
wire [3:0] ALUop;
wire GRSce, RXce, RFce, PSWce; 
wire DATAoe, GRSoe, RFoe;
wire SRC;
wire [3:0] DATA;
wire [1:0] index, Rs, Rd;//只有一个index,但有两个寄存器,在后面就要进行选择
wire [3:0] OPCODE;
wire [5:0] uAR_Q, next_addr;//这一条地址和下一条地址
wire [16:0] uI;
wire [5:0] uAG_Out;
wire branch_mode;//BM

/** The input port is replaced with an internal signal **/
assign reset  = PB[0];
assign clk    = PB[1];
assign DATA   = S[3:0];
assign Rs     = S[1:0];//源操作数的寄存器是DATA的1-0位,真是个神奇宝贝
assign Rd     = S[5:4];
assign OPCODE = S[9:6];

/************* The logic of this experiment *************/
//微地址形成
uAG uAG_inst(.uAGOut(uAG_Out), .OPCODE(OPCODE), .NA(next_addr), .BM(branch_mode));

//微地址寄存器
uAR #(6) uAR_inst(.oQ(uAR_Q), .iD(uAG_Out), .Clk(clk), .Reset(reset));

//控制存储器
ROM CM(.iAddress(uAR_Q), .oData(uI));

//微指令译码
wire NOP1
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值