目录
近来有空闲,把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~
一、程序计数器PC
1. 设计程序计数器PC
运用宏功能模块lpm_counter设计程序计数器PC,连线。
2. 仿真
每来一个clock,程序计数器PC自加1,比如开始是5,在上升沿的时候跳变加1。
当遇到分支程序的时候,JMP_address给PC赋值,SET_pc告诉PC这个时候要重新赋值,让PC从置数这个地方开始。
对比预设的JMP_address,SET_pc告诉PC跳变置数;每来一个clock,PC在上升沿+1。
二、PC后端连接一个ROM,由PC来产生ROM的地址
1. 参考电路图
2. 设计PC后端连接ROM
(1)将PC模块化
打开设计的PC文件,点file然后点create/update,然后create symbol files for current file,产生bsf文件,就是PS的模块化原件。
(2)根据参考电路图连接电路
当clock上升沿有效的时候,把数据A、数据B锁存到寄存器A和寄存器B中,然后数据A、B送到运算器,S\M\C相当于指令,从ROM中取出来送给ALU,运算结果出来之后锁存。
3. 仿真
我们把S\M\C看成一个6位的指令,比如说做加法,汇编就是“ADD A,B”,看运算表加法为1001,M=0,CN=1,所以100101存进去,从ROM取出来送运算器,运算结果出来之后锁存。
由程序计数器PC来提供ROM的地址,至少提前6位的操作码提前写到ROM里面去,默认从0开始,=PC里面的地址永远是下一个指令的地址,而不是当前指令的地址,clock1肯定不能+1,应该是先取地址,地址传递给ROM后,clock1取指,然后PC在clock1的下降沿+1。
由图可见,由PC来产生ROM的地址仿真结果。