FPGA——modelsim上R型指令的仿真

简介: FPGA——modelsim上R型指令的仿真

and,or,xor,add,sub

sll,srl

1、各个模块的作用

  • IF是取指模块(instruction Fetch)
  • ID是译码模块
  • InstMem是指存模块(指令存储器)模块,是一个ROM芯片
  • Regfile是寄存器堆
  • EX模块是执行指令,包括写指令(用来做运算,可以认为是ALU)。

2、整体流程结构

IF模块将指令地址pc片选信号romce送入指存模块InstMem,从InstMem模块中取出指令数据由data脚送入ID模块的inst脚。

ID模块将送入的inst进行译码,ID将源寄存器rs的地址给regAaddr,将源寄存器rt的地址给regBaddr,将目的寄存器地址给regCaddr,将ID模块中的regAaddr和regAread(读信号)送给Regfile模块,以及将ID模块中的regBaddr和regBread(读信号)送给Regfile模块,然后读取Regfile模块中的regAdata和regBdata,将regAdata和regBdata送给ID模块中的regadata_i和regbdata_i,作为ID模块中的regAdata和regBdata送给EX模块。

ID模块读取数据完成后,将数据regAdata,regBdata,regCaddr,regCwr(写信号),op(操作码,用来决定将进行何种操作) 送给EX模块。EX模块获得数据和操作码后进行运算,运算后的结果保存到regCdata中,EX模块将regCdata,regCaddr和regCwr写入Regfile模块,将数据写入寄存器堆保存起来。

3、各个模块对应代码

1、InstMem模块

//      R                                                          rs   rt     rd
      instmem [0] = 32'h00214020;    //r1+r1->r8   add  000000_00001_00001_01000_00000_100000    
        instmem [1] = 32'h00832022;    //r4-r3->r4   sub  000000_00100_00011_00100_00000_100010
        instmem [2] = 32'h00431024;    //r2&r3->r2   and  000000_00010_00011_00010_00000_100100
        instmem [3] = 32'h00214025;    //r1|r1->r8    or  000000_00001_00001_01000_00000_100101
        instmem [4] = 32'h00431026;    //r2^r3->r2   xor  000000_00010_00011_00010_00000_100110
        instmem [5] = 32'h00011040;    //r2<-r1<<1   sll  000000_00000_00001_00010_00001_000000
        instmem [6] = 32'h00043842;    //r7<-r4>>1   srl  000000_00000_00100_00111_00001_000010

2、EX模块

`Add:
      regcData = regaData + regbData;
`Sub:
      regcData = regaData - regbData;
`And:
      regcData = regaData & regbData;
`Or:
      regcData = regaData | regbData;
`Xor:
      regcData = regaData ^ regbData;
`Sll:
      regcData = regaData << instruction[10:6];
`Srl:
      regcData = regaData >> instruction[10:6];

3、ID模块

wire [5:0] inst_op = inst[31:26];    
 wire [5:0] func = inst[5:0];
`Inst_r:
  case(func)
     `Add:
       begin
           op = `Add;
           regaRead = `Valid;
           regbRead = `Valid;
           regcWrite = `Valid;
           regaAddr = inst[25:21];
           regbAddr = inst[20:16];
           regcAddr = inst[15:11];
           imm = `Zero;
       end
     `Sub:
       begin
           op = `Sub;
           regaRead = `Valid;
           regbRead = `Valid;
           regcWrite = `Valid;
           regaAddr = inst[25:21];
           regbAddr = inst[20:16];
           regcAddr = inst[15:11];
           imm = `Zero;
       end
     `And:
       begin
           op = `And;
           regaRead = `Valid;
           regbRead = `Valid;
           regcWrite = `Valid;
           regaAddr = inst[25:21];
           regbAddr = inst[20:16];
           regcAddr = inst[15:11];
           imm = `Zero;
       end
     `Or:
       begin
           op = `Or;
           regaRead = `Valid;
           regbRead = `Valid;
           regcWrite = `Valid;
           regaAddr = inst[25:21];
           regbAddr = inst[20:16];
           regcAddr = inst[15:11];
           imm = `Zero;
       end
     `Xor:
       begin
           op = `Xor;
           regaRead = `Valid;
           regbRead = `Valid;
           regcWrite = `Valid;
           regaAddr = inst[25:21];
           regbAddr = inst[20:16];
           regcAddr = inst[15:11];
           imm = `Zero;
       end
     `Sll:
       begin
           op = `Sll;
           regaRead = `Valid;
           regbRead = `Invalid;
           regcWrite = `Valid;
           reg

4、仿真结果

相关文章
|
算法 芯片 异构计算
通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
|
算法 异构计算
m基于FPGA的GFDM调制解调系统verilog实现,包含testbench仿真测试文件
m基于FPGA的GFDM调制解调系统verilog实现,包含testbench仿真测试文件
70 0
|
算法 计算机视觉 异构计算
FPGA图像处理(高斯滤波)仿真篇
高斯滤波是一种低通平滑滤波,常用于模糊处理和减少噪声信号,其中模糊处理常用于预处理,即在提取目标之前去除图像中的一些细节等,这有利于高通处理。对于二维的数字图像信号,一般通过线性滤波器和非线性滤波器的模糊处理来减少强噪声信号。平滑滤波器就是用滤波掩模确定的邻域内的像素与加权值相卷积后得到的灰度均值来代替每个像素的值,这就很容易使用硬件实现。 GAUSS 滤波算法克服了边界效应,因而滤波后的图像较好。
|
算法 数据安全/隐私保护 异构计算
基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench
基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench
318 0
基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench
|
算法 异构计算
m基于FPGA的viterbi译码verilog实现,包含testbench和MATLAB配套验证仿真程序
m基于FPGA的viterbi译码verilog实现,包含testbench和MATLAB配套验证仿真程序
170 0
|
算法 异构计算
m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序
m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序
380 0
m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序
|
算法 异构计算
m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真
m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真
273 0
m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真
|
异构计算
FPGA新起点V1开发板(五)——Modelsim软件的使用(联合仿真
FPGA新起点V1开发板(五)——Modelsim软件的使用(联合仿真
201 0
FPGA新起点V1开发板(五)——Modelsim软件的使用(联合仿真
|
算法 测试技术 异构计算
FPGA:逻辑功能的仿真与验证
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
122 0
FPGA:逻辑功能的仿真与验证
|
12天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的1024QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的1024QAM调制解调系统的仿真与实现。通过Vivado 2019.2进行仿真,分别在SNR=40dB和35dB下验证了算法效果,并将数据导入Matlab生成星座图。1024QAM调制将10比特映射到复数平面上的1024个星座点之一,适用于高数据传输速率的应用。系统包含数据接口、串并转换、星座映射、调制器、解调器等模块。Verilog核心程序实现了调制、加噪声信道和解调过程,并统计误码率。
32 1

热门文章

最新文章