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

西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計

這篇具有很好參考價值的文章主要介紹了西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?代碼部分:

module CPU(  
input clk,              //時鐘  
input reset,            //復(fù)位  
input [7:0]M_data_in,  
output reg Wirte_read,  
output [11:0]M_address,  
output [7:0]M_data_out,  
output reg overflow  
);  
//通用寄存器組  
reg[7:0]R0;  
reg[7:0]R1;  
reg[7:0]R2;  
reg[7:0]R3;  
reg[11:0]PC;    //程序計數(shù)器  
reg[15:0]IR;    //指令寄存器  
reg [7:0]Acc;   //累加寄存器/臨時寄存器  
reg [8:0]temp;  //加減運(yùn)算擴(kuò)充符號位后的臨時寄存器  
reg [11:0]MAR;  //內(nèi)存地址寄存器  
reg [7:0]MDR;   //內(nèi)存數(shù)據(jù)寄存器  
assign  M_address = MAR;  
assign  M_data_out = MDR;  
//狀態(tài)  
localparam st_0  =  3'b000;  
localparam st_1  =  3'b001;  
localparam st_2  =  3'b010;  
localparam st_3  =  3'b011;  
localparam st_4  =  3'b100;  
reg [2:0]status /*synthesis preserve*/;  
//指令助記符  
parameter Idle = 4'b0000;  
parameter Load = 4'b0001;  
parameter Move = 4'b0010;  
parameter Add  = 4'b0011;  
parameter Sub  = 4'b0100;  
parameter AND  = 4'b0101;  
parameter OR   = 4'b0110;  
parameter XOR  = 4'b0111;  
parameter Shr  = 4'b1000;  
parameter Shl  = 4'b1001;  
parameter Swap = 4'b1010;  
parameter Jmp  = 4'b1011;  
parameter Jz   = 4'b1100;  
parameter Read = 4'b1101;  
parameter Write = 4'b1110;  
parameter Stop = 4'b1111;  
  
always @(*)   
begin  
    if(status == st_3 && reset == 1'b1 && IR[15:12] == Write)  
        Wirte_read = 1'b1;  
    else  
        Wirte_read = 1'b0;  
    if(status == st_1 && reset == 1'b1 && (IR[15:12]==Add || IR[15:12]==Sub)) 
        if(temp[8]^temp[7])   
            overflow = 1'b1;  
        else  
            overflow = 1'b0;  
    else    overflow = 1'b0;  
end  

 always @(posedge clk,negedge reset)  
begin  
    if(reset == 1'b0)  
        begin  
            R0 = 8'b0000_0000;  
            R1 = 8'b0000_0000;  
            R2 = 8'b0000_0000;  
            R3 = 8'b0000_0000;  
            PC = 8'b0000_0000;  
            IR = 16'h0000;  
            MDR = 8'b0000_0000;  
        end  
    else  
        case(status)  
            st_0:  
                begin  
                    IR[15:8] = M_data_in;  
                    IR[7:0]  = 8'b0000_0000;  
                    if(IR[15:12] != 4'b1111)  
                    PC = PC + 1'b1;  
                end  
            st_1:  
                begin  
                    case(IR[15:12])  
                        Idle:begin  end  
                        Load:begin  
                            R0 = IR[11:8];  
                            end  
                        Move:begin  
                            case(IR[11:10])  
                                2'b00:R0 = Acc;  
                                2'b01:R1 = Acc;  
                                2'b10:R2 = Acc;  
                                2'b11:R3 = Acc;  
                            endcase  
                            end  
                        Add:begin  
                            case(IR[11:10])  
                                2'b00:begin  
                                    temp = {R0[7],R0}+{Acc[7],Acc};  
                                    R0 = temp[7:0];  
                                    end  
                                2'b01:begin  
                                    temp = {R1[7],R1}+{Acc[7],Acc};  
                                    R1 = temp[7:0];  
                                    end  
                                2'b10:begin  
                                    temp = {R2[7],R2}+{Acc[7],Acc};  
                                    R2 = temp[7:0];  
                                    end  
                                2'b11:begin  
                                    temp = {R3[7],R3}+{Acc[7],Acc};  
                                    R3 = temp[7:0];  
                                    end   
                            endcase  
                            end  
                        Sub:begin  
//先求-Acc的補(bǔ)碼,將補(bǔ)碼減法變?yōu)檠a(bǔ)碼加法 (x-y)補(bǔ)=x補(bǔ)+(-y)  
//對于這里沒有直接將-Acc的補(bǔ)碼存在Acc寄存器里的解釋:  
//因為在時鐘下降沿那個always塊里有Acc的賦值,同一個寄存器的賦值不能出現(xiàn)在多個always語句里,會產(chǎn)生沖突  
//雖然一個時鐘上升沿一個時鐘下降沿不會產(chǎn)生沖突,但是編譯時仍會報錯  
//這也是為什么寄存器的清零一部分放在時鐘上升沿時,一部分放在時鐘下降沿時  
                            temp[7:0] = ~Acc;  
                            temp[7:0] = temp + 1'b1;  
                            temp[8] = temp[7];  
                            case(IR[11:10])  
                                2'b00:begin  
                                    temp = {R0[7],R0}+temp;  
                                    R0 = temp[7:0];  
                                    end  
                                2'b01:begin  
                                    temp = {R1[7],R1}+temp;  
                                    R1 = temp[7:0];  
                                    end  
                                2'b10:begin  
                                    temp = {R2[7],R2}+temp;  
                                    R2 = temp[7:0];  
                                    end  
                                2'b11:begin  
                                    temp = {R3[7],R3}+temp;  
                                    R3 = temp[7:0];  
                                    end   
                            endcase  
                            end  
                        AND:begin  
                            case(IR[11:10])  
                                2'b00:R0 = R0 & Acc;  
                                2'b01:R1 = R1 & Acc;  
                                2'b10:R2 = R2 & Acc;  
                                2'b11:R3 = R3 & Acc;  
                            endcase  
                            end  
                        OR:begin  
                            case(IR[11:10])  
                                2'b00:R0 = R0 | Acc;  
                                2'b01:R1 = R1 | Acc;  
                                2'b10:R2 = R2 | Acc;  
                                2'b11:R3 = R3 | Acc;  
                            endcase  
                            end  
                        XOR:begin  
                            case(IR[11:10])  
                                2'b00:R0 = R0 ^ Acc;  
                                2'b01:R1 = R1 ^ Acc;  
                                2'b10:R2 = R2 ^ Acc;  
                                2'b11:R3 = R3 ^ Acc;  
                            endcase  
                            end  
                        Shr:begin  
                            case(IR[11:10])  
                                2'b00:R0 = R0 >>1;  
                                2'b01:R1 = R1 >>1;  
                                2'b10:R2 = R2 >>1;  
                                2'b11:R3 = R3 >>1;  
                            endcase  
                            end  
                        Shl:begin  
                            case(IR[11:10])  
                                2'b00:R0 = R0 <<1;  
                                2'b01:R1 = R1 <<1;  
                                2'b10:R2 = R2 <<1;  
                                2'b11:R3 = R3 <<1;  
                            endcase  
                            end  
                        Swap:begin  
                            case(IR[9:8])  
                                2'b00:case(IR[11:10])  
                                            2'b00:R0 = R0;  
                                            2'b01:R0 = R1;  
                                            2'b10:R0 = R2;  
                                            2'b11:R0 = R3;  
                                        endcase  
                                2'b01:case(IR[11:10])  
                                            2'b00:R1 = R0;  
                                            2'b01:R1 = R1;  
                                            2'b10:R1 = R2;  
                                            2'b11:R1 = R3;  
                                        endcase  
                                2'b10:case(IR[11:10])  
                                            2'b00:R2 = R0;  
                                            2'b01:R2 = R1;  
                                            2'b10:R2 = R2;  
                                            2'b11:R2 = R3;  
                                        endcase  
                                2'b11:case(IR[11:10])  
                                            2'b00:R3 = R0;  
                                            2'b01:R3 = R1;  
                                            2'b10:R3 = R2;  
                                            2'b11:R3 = R3;  
                                        endcase  
                            endcase  
                            end  
                        Jmp:begin   end  
                        Jz:begin    end  
                        Read:begin  end  
                        Write:begin end  
                        Stop:begin  end  
                    endcase  
                end   
            st_2:  
                begin  
                    case(IR[15:12])  
                        Swap:  
                            case(IR[11:10])  
                                2'b00:R0 = Acc;  
                                2'b01:R1 = Acc;  
                                2'b10:R2 = Acc;  
                                2'b11:R3 = Acc;  
                            endcase  
                        Jmp:begin  
                            IR[7:0] = M_data_in;  
                            PC = PC +1'b1;  
                            end  
                        Jz:begin  
                            IR[7:0] = M_data_in;  
                            PC = PC +1'b1;  
                            end  
                        Read:begin  
                            IR[7:0] = M_data_in;  
                            PC = PC +1'b1;  
                            end  
                        Write:begin  
                            IR[7:0] = M_data_in;  
                            PC = PC +1'b1;  
                            MDR = R0;  
                            end  
                    endcase  
                end  
            st_3:  
                begin  
                    case(IR[15:12])  
                        Jmp:PC = IR[11:0];  
                        Jz:begin  
                            if(R0==4'b0000)  
                                PC = IR[11:0];  
                        end  
                        Read:begin  end  
                        Write:begin end  
                    endcase  
                end  
            st_4:  
                begin  
                    case(IR[15:12])  
                        Read:R0 = M_data_in;  
                        Write:begin end  
                    endcase  
                end  
        endcase  
end  
  
always @(negedge clk,negedge reset)  
begin  
    if(reset == 1'b0)  
        begin  
            status = st_0;  
            Acc = 8'b0000_0000;  
            MAR = 8'b0000_0000;  
        end  
    else  
        case(status)  
            st_0:  
                begin  
                MAR = PC;  
                case(IR[9:8])  
                    2'b00:Acc = R0;  
                    2'b01:Acc = R1;  
                    2'b10:Acc = R2;  
                    2'b11:Acc = R3;  
                endcase  
                    status = st_1;  
                end  
            st_1:  
                begin  
                    case(IR[15:12])  
                        Swap:status = st_2;  
                        Jmp:status = st_2;  
                        Jz:status = st_2;  
                        Read:status = st_2;  
                        Write:status = st_2;  
                        default:status = st_0;  
                    endcase  
                end  
            st_2:  
                begin  
                    case(IR[15:12])  
                        Jmp:begin  
                            MAR = IR[11:0];  
                            status = st_3;  
                            end  
                        Jz:begin  
                            if(R0 == 4'b0000)  
                                MAR = IR[11:0];  
                            else  
                                MAR = PC;  
                            status = st_3;  
                            end  
                        Read:begin  
                            MAR = IR[11:0];  
                            status = st_3;  
                            end  
                        Write:begin  
                            MAR = IR[11:0];  
                            status = st_3;  
                            end  
                        default:status = st_0;  
                    endcase  
                end  
            st_3:  
                begin  
                    case(IR[15:12])  
                        Read:begin    
                            MAR = PC;  
                            status = st_4;  
                        end  
                        Write:begin   
                            MAR = PC;  
                            status = st_4;  
                        end  
                        default:status = st_0;  
                    endcase  
                end  
            st_4:status = st_0;  
        endcase  
end  
endmodule  

波形圖部分:

西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計,verilog,fpga開發(fā),經(jīng)驗分享

(上圖Load為2節(jié)拍,我之前寫錯了。。。這里忘了改了)

西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計,verilog,fpga開發(fā),經(jīng)驗分享

西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計,verilog,fpga開發(fā),經(jīng)驗分享

西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計,verilog,fpga開發(fā),經(jīng)驗分享文章來源地址http://www.zghlxwxcb.cn/news/detail-536427.html

到了這里,關(guān)于西南交通大學(xué) 計算機(jī)組成原理實驗課程設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 南京大學(xué)數(shù)字電路與計算機(jī)組成實驗的Verilator仿真(二)

    南京大學(xué)數(shù)字電路與計算機(jī)組成實驗的Verilator仿真(二)

    top.v sim_main.cpp 仿真結(jié)果 top.v sim_main.cpp 仿真結(jié)果 top.v sim_main.cpp top.v bcd7seg.v sim_main.cpp nvboard約束文件 top.nxdc Makefile文件 結(jié)果展示

    2024年02月15日
    瀏覽(89)
  • 山東大學(xué)計算機(jī)組成與設(shè)計實驗七 節(jié)拍脈沖發(fā)生器時序電路

    山東大學(xué)計算機(jī)組成與設(shè)計實驗七 節(jié)拍脈沖發(fā)生器時序電路

    山東大學(xué)計算機(jī)組成與設(shè)計實驗七 節(jié)拍脈沖發(fā)生器時序電路實驗, 山東大學(xué)計算機(jī)組成與設(shè)計實驗, 山東大學(xué)計算機(jī)組成與設(shè)計實驗報告, 計算機(jī)組成原理實驗報告, 山東大學(xué)計算機(jī)組成原理實驗報告 掌握節(jié)拍脈沖發(fā)生器的設(shè)計方法,理解節(jié)拍脈沖發(fā)生器的工作原理。 連續(xù)節(jié)

    2023年04月15日
    瀏覽(23)
  • 大連交通大學(xué)813軟件工程考研習(xí)題

    1.什么是軟件生存周期模型?有哪些主要模型? 生存周期模型:描述軟件開發(fā)過程中各種活動如何執(zhí)行的模型。對軟件開發(fā)提供強(qiáng)有力的支持,為開發(fā)過程中的活動提供統(tǒng)一的政策保證,為參與開發(fā)的人員提供幫助和指導(dǎo),是軟件生存周期模型化技術(shù)的基礎(chǔ),也是建立軟件開發(fā)

    2024年02月13日
    瀏覽(16)
  • 24大連交通大學(xué)軟件工程813題庫

    1.下面錯誤的說法是( ?)。 ????A.??每個數(shù)據(jù)流必須用名詞或名詞短語命名 ????B.每個加工必須有名字,通常是動詞短語 ????c.每個數(shù)據(jù)存儲必須用名詞或名詞短語 D.每個數(shù)據(jù)源點或終點必須有名字 答案:C 2.下面錯誤的說法是( ?)。 ????A.判定表能夠把在什么

    2024年02月14日
    瀏覽(23)
  • 24大連交通大學(xué)813軟件工程考研習(xí)題

    1.等價分類法相關(guān)概念。 (1)等價分類法的基本思想是什么? 根據(jù)程序的輸入特性,將程序的定義域劃分為有限個等價區(qū)段 —“等價類”,從等價類中選擇出的用例具有“代表性”,即測試某個等價類的代表值就等價于對這一類其它值的測試。如果某個等價類的一個輸入數(shù)

    2024年02月13日
    瀏覽(26)
  • 高校教務(wù)系統(tǒng)登錄頁面JS分析——重慶交通大學(xué)

    高校教務(wù)系統(tǒng)登錄頁面JS分析——重慶交通大學(xué)

    本文將介紹高校教務(wù)系統(tǒng)的密碼加密邏輯以及使用JavaScript進(jìn)行逆向分析的過程。通過本文,你將了解到密碼加密的基本概念、常用加密算法以及如何通過逆向分析來破解密碼。 本文僅供交流學(xué)習(xí),勿用于非法用途。 密碼加密是一種保護(hù)信息安全的技術(shù)手段,它通過將明文(

    2024年02月07日
    瀏覽(21)
  • 體驗文心一言AI大模型生成伊利諾伊大學(xué)香檳分校、復(fù)旦大學(xué)、上海交通大學(xué)、東南大學(xué)和加州伯克利大學(xué)簡介

    體驗文心一言AI大模型生成伊利諾伊大學(xué)香檳分校、復(fù)旦大學(xué)、上海交通大學(xué)、東南大學(xué)和加州伯克利大學(xué)簡介

    UIUC(University of Illinois at Urbana-Champaign)是美國伊利諾伊大學(xué)香檳分校的簡稱。該學(xué)校成立于1868年,位于美國伊利諾伊州香檳市,是一所公立研究型大學(xué)。UIUC是美國著名的常春藤盟校之一,在多個學(xué)科領(lǐng)域享有聲譽(yù),包括工程、商科、建筑、心理學(xué)、法學(xué)、醫(yī)學(xué)、農(nóng)學(xué)等。

    2024年02月11日
    瀏覽(39)
  • 【西安交通大學(xué)】:融合傳統(tǒng)與創(chuàng)新的學(xué)府之旅

    【西安交通大學(xué)】:融合傳統(tǒng)與創(chuàng)新的學(xué)府之旅

    ??博客主頁:小智_x0___0x_ ??歡迎關(guān)注:??點贊??收藏??留言 ??系列專欄:小智帶你閑聊 ??代碼倉庫:小智的代碼倉庫 西安交通大學(xué)是國家教育部直屬重點大學(xué),為我國最早興辦的高等學(xué)府之一。其前身是1896年創(chuàng)建于上海的南洋公學(xué),1921年改稱交通大學(xué),1956年國務(wù)院

    2024年02月15日
    瀏覽(23)
  • 最長公共子序列(上海交通大學(xué)考研機(jī)試題)

    題目描述 給出兩個長度為 n 的整數(shù)序列,求它們的最長公共子序列(LCS)的長度,保證第一個序列中所有元素都不重復(fù)。 注意: 第一個序列中的所有元素均不重復(fù)。 第二個序列中可能有重復(fù)元素。 一個序列中的某些元素可能不在另一個序列中出現(xiàn)。 輸入樣例 5 2 1 3 8 7 2

    2024年02月09日
    瀏覽(24)
  • 西安交通大學(xué)SQ軸承數(shù)據(jù)集(文末附數(shù)據(jù))

    西安交通大學(xué)SQ軸承數(shù)據(jù)集(文末附數(shù)據(jù))

    我們公開了一份基于振動信號的軸承數(shù)據(jù)集,數(shù)據(jù)來源于西安交通大學(xué)SQ(Spectra Quest)實驗平臺。 實驗利用SQ(Spectra Quest)公司的機(jī)械故障綜合模擬試驗臺進(jìn)行電機(jī)軸承外圈和內(nèi)圈故障模擬,采集了三種轉(zhuǎn)頻(19.05Hz、29.05Hz、39.05Hz)下三種不同程度故障(輕度故障、中度故障

    2024年02月02日
    瀏覽(34)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包