简易RISC |
您所在的位置:网站首页 › 指令lda › 简易RISC |
简易RISC-CPU的设计,使用ModelSim
《Verilog数字系统设计教程》——夏宇闻,简易RISC-CPU的设计,书中内容直接使用ModelSim进行代码的测试 文章目录 简易RISC-CPU的设计,使用ModelSim准备工作测试结果与分析HLT,3'b000SKZ,3’b001ADD,3'b010ANDD,3'b011XORR,3'b100LDA,3'b101STO,3'b110JMP,3'b111 准备工作首先新建工程File->New->Project,并依次将代码加入到project中Add to Project->Existing File,并执行编译Compile->Compile All: 之后 这里注意一点,直接编译其实会报错,因为modelsim把test1.pro和test1.dat认为是verilog文件,进行了编译,所以要修改这两个文件的type为text 为了执行simulate,可以在Library中直接点击顶层测试文件,即top,进入simulate窗口 依次将需要观察的波形,加入到Wave中,之后直接运行,可以通过直接输入run -all进行仿真。(注:这里的Transcript也可以输入pwd命令查看当前路径,以及cd等命令),在这里还要注意,需要修改一下top.v的里面读取文件的路径,如$readmemb(“test1.pro”, u_rom.rom);如果直接用$readmemb(“…/test1.pro”, u_rom.rom);会找不到数据 top.v文件中写了3个$stop,分别是查看三个不同测试数据的数据。 不同opcode对应的状态如下表所示 STATEOPCODEHLT3’b000SKZ3’b001ADD3’b010ANDD3’b011XORR3’b100LDA3’b101STO3’b110JMP3’b111仿真中使用的xxx.pro文件和xxx.data文件在联合仿真时要放到simulation文件夹下才能成功加载 $readmemb ( “test1.pro”,t_rom_.memory ); 和 $readmemb ( “test1.dat”,t_ram_.ram); 两个语句可以把编译好的汇编机器码装入虚拟ROM,把需要参加运算的数据装入虚拟RAM就可以开始仿真。 上面语句中的第一项为打开的文件名,后一项为系统层次管理下的ROM和RAM模块中的存储器memory和ram.下面为测试设计功能所需要的机器码的数据文件。 若直接用modelsim打开工程时,File->Open->选择.mpf文件 测试结果与分析主要看的是波形图和state是否一一对应,通过代码可知,在状态state位S5,S6,S7的时候,分支最多,因此主要观察这三个状态在波形图中的表现。对于其他状态的观察与分析,只将极个别的opcode进行验证。 直接输入run -all进行simulate首先是名为test1的task,他读取了test1.pro以及test1.data,transcript输出结果如下 周期1:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0100 周期2:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_1100 周期3:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0000 周期4:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_1010 周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0000 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0000 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0000 S1,S2,S3,S4 S5,S6,S7全0 SKZ,3‘b001波形图,所有数据都是在clk的上升沿去观察的,最下面的cstate是对应的8个周期,从wr到data_ctrl_ena的数据以第一个周期为例子。在波形图上为01000100,对应的代码如下,通过位连接操作符,直接对8个变量进行非阻塞性赋值。可以发现是一一对应的。 周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0110_0000 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000
周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0110_0000 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0110_0000 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0110_0000 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0000 周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0001 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b1000_0001 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0001 周期1:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_0100 周期2:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0100_1100 周期5:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0001_0000 周期6:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0001_1000 周期7:{wr,rd,load_acc,load_pc , incr_pc,load_ir,halt,datactrl_ena} = 8’b0000_0000 对应的状态机转换,和图中所示一致 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |