国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vivado MIPS寄存器堆(含測試代碼)

這篇具有很好參考價值的文章主要介紹了Vivado MIPS寄存器堆(含測試代碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本篇文章使用Verilog語言編寫實現(xiàn)帶有優(yōu)先級的83譯碼器,含有設計代碼和測試代碼。

一、

寄存器堆regfile模塊實現(xiàn)了32個32位通用寄存器??梢酝瑫r進行兩個寄存器的讀操作一個寄存器的寫操作。寫操作是同步寫,寫使能信號(we)為1時有效,為0時無效;讀操作可以在任意時刻進行讀操作。
(1)當復位信號有效(rst為1)時,讀數(shù)據(jù)(rdata1和rdata2)為0
(2)否則當復位信號無效(rst為0)時,當讀地址為0,讀數(shù)據(jù)為0
(3)否則當讀寫地址相等,且讀寫使能都有效的時候,讀數(shù)據(jù)為寫數(shù)據(jù)
(4)否則當讀使能有效時,讀數(shù)據(jù)為寄存器堆中存儲數(shù)據(jù)
(5)其余情況,讀數(shù)據(jù)為0

接口描述表如下:

接口名 寬度 輸入/輸出
rst 1 輸入
clk 1 輸入
waddr 5 輸入
wdata 32 輸入
we 1 輸入
raddr1 5 輸入
re1 1 輸入
rdata2 32 輸出
raddr2 5 輸入
re2 1 輸入
rdata2 32 輸出

二、宏定義文件

將宏定義文件(此處為define.v)右鍵設置為global include文件,即可在其他文件中進行引用。

`define RegAddrBus 4:0
`define RegDataBus 31:0
`define RegNum 31:0
`define RstEnable 1
`define RstDisable 0
`define ZeroWord 0
`define ReadEnable 1
`define WriteEnable 1
三、設計代碼
`timescale 1ns / 1ps
`include "define.v"
module regfile(
    input wire clk,
    input wire rst,
    input wire [`RegAddrBus] waddr,
    input wire [`RegDataBus] wdata,
    input wire we,
    input wire [`RegAddrBus] raddr1,
    input wire re1,
    output reg [`RegDataBus] rdata1,
    input wire [`RegAddrBus] raddr2,
    input wire re2,
    output reg [`RegDataBus] rdata2
    );   
    reg [`RegDataBus] reg1[`RegNum];

    always@(*)begin
    //復位信號為0,寫信號為1,當前地址不為0時,數(shù)據(jù)寫入寄存器
        if(rst==`RstDisable)begin
            if((we==`WriteEnable)&&(waddr!=0))begin
                reg1[waddr]<=wdata;
            end
        end
    end    
    //讀rdata1
    always@(*)begin
        if(rst==`RstEnable)begin
            //復位信號有效時,讀數(shù)據(jù)為0
            rdata1<=`ZeroWord;
        end
        //復位信號無效時
        //讀信號為1,讀地址為0時,讀數(shù)據(jù)為0
        else if((re1==`ReadEnable)&&(raddr1==0))begin
            rdata1<=`ZeroWord;
        end
        //讀信號為1,寫信號為1,讀地址=寫地址
        else if((re1==`ReadEnable)&&(we==`WriteEnable)&&(raddr1==waddr))begin
            rdata1<=wdata;
        end
        else if(re1==`ReadEnable) begin
            rdata1<=reg1[raddr1];
        end
        //其余情況下,讀數(shù)據(jù)為0
        else begin
        rdata1<=`ZeroWord;
        end
    end
    //讀rdata2
    always@(*)begin
        if(rst==`RstEnable)begin
            rdata2<=`ZeroWord;
        end
        else if((re2==`ReadEnable)&&(raddr2==0))begin
            rdata2<=`ZeroWord;
        end
        else if((re2==`ReadEnable)&&(we==`WriteEnable)&&(raddr2==waddr))begin
            rdata2<=wdata;
        end
        else if(re2==`ReadEnable) begin
            rdata2<=reg1[raddr2];
        end
        else begin
        rdata2<=`ZeroWord;
        end
    end
endmodule
四、測試代碼
`timescale 1ns / 1ps
module regfile_tb();
    reg clk;
    reg rst;
    reg [`RegAddrBus] waddr;
    reg [`RegDataBus] wdata;
    reg we;
    reg [`RegAddrBus] raddr1;
    reg re1;
    wire [`RegDataBus] rdata1;
    reg [`RegAddrBus] raddr2;
    reg re2;
    wire [`RegDataBus] rdata2;
    regfile regfile0(rst,clk,waddr,wdata,we,raddr1,re1,rdata1,raddr2,re2,rdata2);
    integer i;
    initial begin
        clk=1;
        forever begin
            #10 clk=~clk;
        end
    end    
    //若把寫和讀放在兩個initial中,存在并列的問題
    initial begin
        rst=0;
        #10
        rst=1;
        #30
        rst=0;
        #30
        //寫使能有效,寫數(shù)據(jù)有效
        we=1;
        wdata=32'h1234;
        for(i=0;i<=31;i=i+1)begin
            waddr=i;
            wdata=wdata+32'h1111;
            #30;
        end
        //寫無效,讀有效
        we=0;
        re1=1;
        re2=1;
        for(i=0;i<=31;i=i+1)begin
            raddr1=i;
            raddr2=31-i;
            #30;
        end
        //讀寫地址相等
        we=1;
        wdata=32'h5678;
        for(i=0;i<=31;i=i+1)begin
            waddr=i;
            raddr1=i;
            raddr2=i;
            #30;
            wdata=wdata+32'h0101;
        end
        //恢復0
        re1=0;
        re2=0;
        we=0;
        #100 $finish;
    end
endmodule
五、仿真波形圖

Vivado MIPS寄存器堆(含測試代碼)

僅供學習交流,如發(fā)現(xiàn)錯誤,歡迎大家指正。文章來源地址http://www.zghlxwxcb.cn/news/detail-475002.html

到了這里,關(guān)于Vivado MIPS寄存器堆(含測試代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • IC驗證-寄存器專項測試

    關(guān)鍵點:對粘連的理解和驗證 DUT初始化后,讀取寄存器值,判斷讀取的值是否等于設計時所配置的初始值,不等則證明寄存器有錯。 通常,對一個寄存器進行賦值,不會影響到其他寄存器值,但是當發(fā)生寄存器之間的粘連時,寄存器之間就不再有獨立性,對其中某個寄存器

    2024年02月09日
    瀏覽(19)
  • 代碼生成- 寄存器計算機

    代碼生成- 寄存器計算機

    寄存器計算機是目前最流行的機器體系結(jié)構(gòu)之一。 效率很高 機器體系結(jié)構(gòu)規(guī)整 機器基于寄存器架構(gòu): 典型的有16、32或更多個寄存器,所有操作都在寄存器中進行 訪存都通過load/store進行,內(nèi)存不能直接運算 內(nèi)存,存放溢出的變量(溢出是指寄存器放不下的變量) 寄存器,

    2023年04月08日
    瀏覽(24)
  • 【ARM Coresight 系列文章 10.3 - ARM Coresight STM 寄存器介紹 及STM DMA 傳輸介紹】

    上篇文章:ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets STM 的寄存器主要可以分為以下幾類: STM DMA 相關(guān)的; STM HW Trigger 相關(guān)的; 系統(tǒng)控制及狀態(tài)寄存器; 只讀寄存器。 STM DMA 相關(guān)的寄存器

    2024年02月15日
    瀏覽(43)
  • 【Verilog編程】線性反饋移位寄存器(LFSR)原理及Verilog代碼實現(xiàn)

    【Verilog編程】線性反饋移位寄存器(LFSR)原理及Verilog代碼實現(xiàn)

    移位寄存器 :指若干個寄存器排成一列,每個寄存器中存放1bit二進制數(shù)據(jù)(0或1),每個時鐘周期向左或向右移動一個bit。下圖所示為一個向右移動的移位寄存器。 反饋移位寄存器(Feedback Shift Register,F(xiàn)SR) :每個時鐘脈沖,移位寄存器向右移動一位,則移位寄存器的左左側(cè)就

    2024年02月15日
    瀏覽(21)
  • (超詳細)STM32芯片F(xiàn)lash讀寫操作講解和代碼(寄存器版本)

    (超詳細)STM32芯片F(xiàn)lash讀寫操作講解和代碼(寄存器版本)

    關(guān)于Flash,官方的解釋為:Flash為32位寬的存儲單元,可用于存儲代碼和數(shù)據(jù)常量。Flash模塊位于微控制器內(nèi)存映射中的特定基址……。而對于我們來說,只要知道Flash閃存區(qū)是一個掉電后也不會清除的數(shù)據(jù)存儲地。(相信大家對于Flash閃存也有著一定 的了解了,我也不多說廢話

    2023年04月19日
    瀏覽(23)
  • 【IC前端虛擬項目】MVU寄存器文檔編寫與RTL代碼生成

    【IC前端虛擬項目】數(shù)據(jù)搬運指令處理模塊前端實現(xiàn)虛擬項目說明-CSDN博客 兜兜轉(zhuǎn)轉(zhuǎn)又回到了寄存器,但是沒有辦法,虛擬項目肯定要貼近真實真實項目的,而一個真實項目里不管是做模塊設計還是SOC設計,寄存器總是難以避免的。關(guān)于寄存器的生成使用和驗證,有一個專欄

    2024年01月18日
    瀏覽(59)
  • 51單片機串口通信原理、相關(guān)寄存器配置與簡單串口收發(fā)程序代碼

    51單片機串口通信原理、相關(guān)寄存器配置與簡單串口收發(fā)程序代碼

    目錄 1. 串口通信原理 2. 51單片機串口通信 ?2.1 串口簡要模式圖 ?2.2 相關(guān)寄存器 (1)PCON、SCON、SBUF (2)IE、IPH、IP (3)配置T1定時器 2.3 波特率和系統(tǒng)時鐘和TH1和TL1計算 ?3.串口通信簡單收發(fā)使用代碼 ? 3.1 在STC-isp使用端口助手,從單片機發(fā)送字節(jié) ?3.2 通過端口助手利用主

    2024年02月05日
    瀏覽(30)
  • IC驗證——perl腳本ccode_standard——c代碼寄存器配置標準化

    IC驗證——perl腳本ccode_standard——c代碼寄存器配置標準化

    目錄 1 腳本名稱 2 腳本路徑 3 腳本參數(shù)說明 4 腳本操作說明 5 腳本代碼 ccode_standard /scripts/bin/ccode_standard 次序 參數(shù)名 說明 1 address (./rfdig;.;..;./boot) 指定腳本執(zhí)行路徑(可以為腳本所在路徑的任意相對路徑) help 腳本使用幫助,打印說明信息 2 all 運行腳本后,腳本會解析

    2024年01月18日
    瀏覽(44)
  • 【FreeRTOS】——中斷優(yōu)先級設置&中斷相關(guān)寄存器&臨界段代碼保護&調(diào)度器掛起與恢復

    【FreeRTOS】——中斷優(yōu)先級設置&中斷相關(guān)寄存器&臨界段代碼保護&調(diào)度器掛起與恢復

    目錄 前言: 一、中斷優(yōu)先級設置 二、中斷相關(guān)寄存器(STM32-Cortex M3) 三、臨界段代碼保護 四、任務調(diào)度器的掛起和恢復 總結(jié): 博客筆記根據(jù)正點原子視頻教程編輯,僅供學習交流使用! ①中斷概念回顧 讓CPU打斷正常運行的程序,轉(zhuǎn)而去處理緊急的事件(程序),就叫中

    2024年02月10日
    瀏覽(55)
  • stm32的BRR寄存器和BSRR寄存器

    stm32的BRR寄存器和BSRR寄存器

    1、BRR--- ? bit ? RESET(置0)? register?? //高16位無,低16位置1為0,不能寫1 2 、BSRR--- ? bit ? SET(設置1或0) ? ? ? register?? //低16位設置1為0 BSRR:用于低16位的作用是讓指定的IO口置1;而高16位的作用是讓指定的IO口置0。 ?

    2024年02月11日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包