verilog实现的16位CPU单周期设计verilog实现的16位CPU单周期设计
这个⼯程完成了16位CPU的单周期设计,模块化设计,包含对于关键指令的仿真与设计,有包含必要的分析说明。单周期CPU结构图
have是什么意思
单周期CPU设计真值表与结构图
beg的用法该CPU⽤到的指令集,16位8个通⽤寄存器
设计思路
1. Instruction Memory:
输⼊8位的PC指令,输出对应内存的16位指令
vote是什么意思2. Control Unit
螺丝刀英文输⼊16位的指令,根据真值表,输出对应结果
bsx
3. Register File
输⼊三个地址和写⼊内容,写⼊信号,输出两个地址对应的内容
由于单周期内不能⼀边读⼀边写,故有⼀个时钟信号,通过⼀级缓存,在下⼀个时钟信号来临时⽴即写⼊内存
输⼊运算数和指令,输出运算结果以及标志位
由于单周期内,标志位并不在当前周期⽽在下⼀周期使⽤,故增加时钟信号,通过⼀级缓存,在下⼀个周期时判断使⽤
四级官网准考证打印5. Data Memory
输⼊⼀个地址,写⼊内容和写⼊信号,输出读取内容
由于单周期内不能⼀边读⼀边写,故有⼀个时钟信号,通过⼀级缓存,在下⼀个时钟信号来临时⽴即写⼊内存
6. PC-NextPC
根据分⽀指令,跳转指令和标志位的组合逻辑,决定PC是+1还是到某⽬标位置
坏女孩ella实验结果
Testbench内容
datamemory⾥⾯的变量来观察整个CPU的流程结果,测试CPU是否正确⼯作
Instruction Memory:
指令0:gr1原本初始化时为0,把gr1加上⼀个⽴即数18,gr1为18(0012)
指令1:gr2原本初始化时为0,把gr2加上⼀个⾼⼋位1,gr2为256(0100)
river是什么意思指令2:从gr1和gr2中取值相加,结果保存在gr3中,gr3应为274(0112)
指令3:把gr3的值保存到datamemory中的dm0,dm0为274(0112)
指令4:gr1的值为18,减去⼀个⽴即数2,gr1为16(0010)
www xdf cn指令5:gr2的值为256,加上⼀个⾼⼋位⽴即数0,结果不变为256(0100)
指令6:从gr1和gr2中取值相加,结果保存在gr3中,gr3应为272(0110)
指令7:把gr3的值保存到datamemory中的dm1,dm1为272(0110)
指令8:从dm0中取值到gr1中,gr1为274(0112)
指令9:从dm1中取值到gr2中,gr2为272(0110)sm 全称
指令10:从gr1和gr2中取值相减,结果保存在gr3中,gr3应为2(0002)
指令11:把gr3的值保存到datamemory中的dm2,dm2为2(0002)
指令12:跳转指令,PC跳转到第14条指令
指令13:该指令不被执⾏,如gr1中出现274+171=445(01BD)则出错
指令14:从gr1和gr2中取值与操作,结果保存在gr3中,gr3应为272(0110)
指令15:把gr3的值保存到datamemory中的dm3,dm3为272(0110)
指令16:把gr1的值置为0
指令17:把gr1的值置为1
指令18:把gr1的值算术左移两位保存在gr3中,gr3为4
指令19:把gr3的值保存到datamemory中的dm4,dm4为4(0004)
指令20:把gr3和gr3相减让ZF标志位为1
指令21:因为ZF标志位为1,所以跳转到指令12,循环执⾏,如PC的值⼤于21,则出错