基于單周期MIPS微控制器設(shè)計(jì)_第1頁(yè)
基于單周期MIPS微控制器設(shè)計(jì)_第2頁(yè)
基于單周期MIPS微控制器設(shè)計(jì)_第3頁(yè)
基于單周期MIPS微控制器設(shè)計(jì)_第4頁(yè)
基于單周期MIPS微控制器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 課程設(shè)計(jì)題目:基于單周期MIPS的微控制器設(shè)計(jì) 已知技術(shù)參數(shù)和設(shè)計(jì)要求:load/store,算術(shù)邏輯運(yùn)算,流程控制三部分是RISC處理器系統(tǒng)的主要組成部分,是RISC處理器的基礎(chǔ),本設(shè)計(jì)以MIPS處理器的指令子集為例,研究RISC的基本實(shí)現(xiàn)及原理。 1)單周期MIPS(load/store指令部分)設(shè)計(jì)與實(shí)現(xiàn) 設(shè)計(jì)要求:參考計(jì)算機(jī)組成與設(shè)計(jì)-硬件/軟件接口、設(shè)計(jì)處理器整體結(jié)構(gòu)和模塊劃分,實(shí)現(xiàn)支持load word(lw)、store word(sw)指令的MIPS單周期數(shù)據(jù)通路,并比較各種實(shí)現(xiàn)的效率、面積和速度。2)單周期MIPS(算術(shù)邏輯運(yùn)算指令部分)設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)要求:參考計(jì)算機(jī)組成與

2、設(shè)計(jì)-硬件/軟件接口、設(shè)計(jì)處理器整體結(jié)構(gòu)和模塊劃分,實(shí)現(xiàn)支持add、sub、and、or和slt指令的MIPS單周期數(shù)據(jù)通路,并比較各種實(shí)現(xiàn)的效率、面積和速度。3)單周期MIPS(流程控制指令部分)設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)要求:參考計(jì)算機(jī)組成與設(shè)計(jì)-硬件/軟件接口、設(shè)計(jì)處理器整體結(jié)構(gòu)和模塊劃分,實(shí)現(xiàn)支持branch equal(beq)、jump(j)、jump and link(jal)、jump register(jr)指令的MIPS單周期數(shù)據(jù)通路,并比較各種實(shí)現(xiàn)的效率、面積和速度。4)通用異步串行收發(fā)器(UART)設(shè)計(jì)與實(shí)現(xiàn)具有基本手法功能的通用異步串行收發(fā)器,并比較各種實(shí)現(xiàn)的效率、面積和速度。5

3、) 小組實(shí)現(xiàn)基于MIPS(子集)單周期數(shù)據(jù)通路的嵌入式控制器設(shè)計(jì)要求:與同組同學(xué)共同完成一個(gè)具有11條指令的單周期MIPS實(shí)現(xiàn),連接通用異步串行收發(fā)器作為外設(shè),實(shí)現(xiàn)嵌入式控制器,并比較各種實(shí)現(xiàn)的效率、面積和速度。基本要求:1. 確定設(shè)計(jì)采用的算法;2. 確定設(shè)計(jì)的體系結(jié)構(gòu);3. 劃分所確定的體系結(jié)構(gòu),畫出模塊圖,確定模塊間的連接關(guān)系,端口方向及寬度;4. 確定設(shè)計(jì)的測(cè)試方案、測(cè)試點(diǎn)及測(cè)試向量;5. 完成設(shè)計(jì)的RTL代碼及測(cè)試代碼;6. 完成設(shè)計(jì)的驗(yàn)證,給出設(shè)計(jì)的性能評(píng)價(jià)(面積、速度等);7. 撰寫課程設(shè)計(jì)報(bào)告。 工作量:本課程設(shè)計(jì)擬按照每4人為一組分工并協(xié)作完成。每位小組成員分別選擇14題之一

4、,作為該組同學(xué)的課程設(shè)計(jì)題目獨(dú)立完成;在完成個(gè)人題目基礎(chǔ)上小組成員共同完成第5題。熟悉開發(fā)環(huán)境、學(xué)習(xí)工具使用:12學(xué)時(shí)分析題目、確定設(shè)計(jì)方案:12學(xué)時(shí)設(shè)計(jì)、驗(yàn)證以及性能評(píng)估、整理數(shù)據(jù):36學(xué)時(shí)工作計(jì)劃安排: 2012.8.27 - 2012.8.29 學(xué)習(xí)VCS、Design Analyser使用方法,分析設(shè)計(jì)題目2012.8.30 - 2012.9.3 利用Verilog語(yǔ)言進(jìn)行系統(tǒng)設(shè)計(jì)、驗(yàn)證 2012.9.4 -2010.9.5 性能評(píng)估、整理數(shù)據(jù) 2012.9.6開始撰寫課程設(shè)計(jì)報(bào)告 同組設(shè)計(jì)者及分工: 指導(dǎo)教師簽字_ 年 月 日 教研室主任意見: 教研室主任簽字_ 年 月 日*注:此任

5、務(wù)書由課程設(shè)計(jì)指導(dǎo)教師填寫。第一部分 功能描述所有的MIPS指令都是32位,支持多種指令,主要有以下幾種:·數(shù)據(jù)加載和存儲(chǔ)指令:lw、sw指令 ·跳轉(zhuǎn)指令:beq條件跳轉(zhuǎn)和j、jr、jl跳轉(zhuǎn)·算數(shù)邏輯運(yùn)算:add、sub、and、or、slt具體有三種格式:處理器有32個(gè)32位寄存器,并且為了測(cè)試和運(yùn)行方便,配備了一個(gè)32字的指令存儲(chǔ)器,和一個(gè)32字的數(shù)據(jù)存儲(chǔ)器(地址0x0000_00000x0000_001f)。還備有UART串口,并且與數(shù)據(jù)存儲(chǔ)器共同編址(0x8000_00000x8000_0008)。第二部分 設(shè)計(jì)方案1、設(shè)計(jì)策略采用分治:將一個(gè)難以直接解決

6、的大問題,分割成一些規(guī)模較小的相同問題,以便各個(gè)擊破,分而治之。本實(shí)驗(yàn)中,我們將整個(gè)數(shù)據(jù)通路化分成多個(gè)模塊:寄存器堆、取指部件、擴(kuò)展器、二選一數(shù)據(jù)選擇器、算術(shù)邏輯單元、數(shù)據(jù)存儲(chǔ)器等,分別設(shè)計(jì)及實(shí)現(xiàn),然后再整體進(jìn)行邏輯控制,最終實(shí)現(xiàn)單周期數(shù)據(jù)通路。2、設(shè)計(jì)思路建立數(shù)據(jù)通路:(1) 按照?qǐng)D1設(shè)計(jì)能夠?qū)崿F(xiàn)R型,lw/sw型和跳轉(zhuǎn)型指令的mips處理器整體數(shù)據(jù)通路圖數(shù)據(jù)通路必須具備必要的存儲(chǔ)元件,可能需要多個(gè),同時(shí)數(shù)據(jù)通路必要的元件可能需要多個(gè)。(2) 選擇一組數(shù)據(jù)通路部件(3) 根據(jù)需求,組裝數(shù)據(jù)通路(4) 分析每條指令的實(shí)現(xiàn),以確定如何設(shè)置影響寄存器傳輸?shù)目刂泣c(diǎn)(5) 裝配控制邏輯3數(shù)據(jù)通路圖圖1

7、 數(shù)據(jù)通路圖第三部分 單周期MIPS分析與設(shè)計(jì)ALU:算術(shù)邏輯運(yùn)算單元,有2個(gè)32位輸入和1個(gè)32位輸出,還有一個(gè)零標(biāo)志位。有3個(gè)控制輸入,而八種可能的輸入組合中只有5種可能出現(xiàn)。對(duì)于取字和存儲(chǔ)指令,ALU用于計(jì)算存儲(chǔ)地址;對(duì)于R型指令, 根據(jù)指令的低6位功能字段的內(nèi)容, ALU執(zhí)行5中操作中的一種。對(duì)于相等分支指令,ALU執(zhí)行劍法操作。實(shí)現(xiàn)代碼:always (ctrl or in1 or in2)begin if(in1=in2) zero<=1; else zero<=0; case (ctrl)3'b010: ALU_out=in1+in2;3'b110:

8、ALU_out=in1-in2;3'b000: ALU_out=in1 & in2;3'b001: ALU_out=in1 | in2;3'b111: if (in1<in2) ALU_out=1; else ALU_out=0; default: ALU_out=0;endcaseendALU控制的代碼實(shí)現(xiàn):module ALU_ctrl( input 1:0 ALUOp, input 5:0 funct, output reg 2:0 ALU_ctrl );always (ALUOp or funct)begin case (ALUOp) 2'

9、b00: ALU_ctrl=3'b010; 2'b01: ALU_ctrl=3'b110; 2'b10: begin case (funct) 6'b100000: ALU_ctrl=3'b010; 6'b100010: ALU_ctrl=3'b110; 6'b100100: ALU_ctrl=3'b000; 6'b100101: ALU_ctrl=3'b001; 6'b101010: ALU_ctrl=3'b111; default: ALU_ctrl=0; endcase end

10、 endcaseendendmodule數(shù)據(jù)存儲(chǔ)單元:是一個(gè)狀態(tài)單元,有讀寫控制信號(hào)、地址和數(shù)據(jù)端口。兩個(gè)輸入是地址和所寫數(shù)據(jù),一個(gè)輸出位為出內(nèi)容,讀寫控制信號(hào)是獨(dú)立的,任意始終只能激活一個(gè)。存數(shù)指令,要從寄存器堆中讀出要存的數(shù)據(jù);取數(shù)指令,則要將剛從存儲(chǔ)器中取出的數(shù)放入寄存器堆中指定寄存器中。實(shí)現(xiàn)代碼:begin case (ctrl_write,ctrl_read)2'b01: out=memaddr;2'b10: memaddr=data;default: $display("error");endcase endMUX:二選一數(shù)據(jù)選擇器,通過控制信號(hào)

11、的值來選擇輸出。實(shí)現(xiàn)代碼:always (*) if(ctrl=0) out=in0; else out=in1;寄存器堆:實(shí)現(xiàn)代碼:always (in1 or in2)begin case (in1)5'b00101: data1 <= 32'h001c;5'b01111: data1 <= 32'h0004;5'b00000: data1 <= 32'h0008;5'b10000: data1 <= 32'h000c;5'b10001: data1 <= 32'h000c;def

12、ault: data1 <= memwriteaddr;endcasecase (in2)5'b00101: data2 <= 32'h001c;5'b01111: data2 <= 32'h0004;5'b00000: data2 <= 32'h0008;5'b10000: data2 <= 32'h000c;5'b10001: data2 <= 32'h000c;default: data2 <= memwriteaddr;endcaseendalways (RegWr

13、ite or writeaddr or writedata) begin memwriteaddr <= writedata;end endmodule符號(hào)擴(kuò)展器:將指令中16位有符號(hào)數(shù)擴(kuò)展成32位有符號(hào)數(shù)符號(hào)代碼:module signal_extend( input 15:0 in, output 31:0 out ); assign out=16'b0,in;endmodule取指部件:首先要從存儲(chǔ)器中將指令取出。為準(zhǔn)備執(zhí)行。下一條指令,也必須把程序計(jì)數(shù)器加到指向下一條指令,即向后移動(dòng)四字節(jié)。此時(shí)所需的取指令以及增加PC以獲得下一時(shí)序指令的地址相對(duì)應(yīng)的數(shù)據(jù)通路,圖如右:代碼

14、:always (posedge clk or posedge reset) begin if(reset) PC<=0; else PC<=PCnext; end根據(jù)分治設(shè)計(jì)策略,確定模塊間的連接關(guān)系,端口方向及寬度,將每一模塊通過控制信號(hào)聯(lián)系起來,最終形成完整的數(shù)據(jù)通路。綜合:module top( input clk, input reset, output 31:0 PCnext, output 4:0 addr_regwrite, output 31:0 data_regwrite, output 31:0 signal_extend );wire 31:0 PC;wir

15、e 31:0 instruction;wire RegDst, Jump, Branch, MemRead, MemtoReg, MemWrite,ALUSrc, RegWrite,zero;wire 1:0 ALUOp;/wire 4:0 addr_regwrite;wire 31:0 data1,data2, ALU2,ALUout,memdata, signal_extend_l,PCnew,add2out,mux4out, jumpaddr_l;wire 2:0 ALUctrl;wire 31:0 jumpaddr;instruction_reg ins_reg(.pc(PC),.in

16、s(instruction);control con(.in(instruction31:26), .RegDst(RegDst), .Jump(Jump), .Branch(Branch), .MemRead(MemRead), .MemtoReg(MemtoReg),.ALUOp(ALUOp),.MemWrite(MemWrite), .ALUSrc(ALUSrc),.RegWrite(RegWrite);mux #(5) mux1_datareg(.in0(instruction20:16), .in1(instruction15:11), .out(addr_regwrite), .c

17、trl(RegDst);data_reg data_reg(.in1(instruction25:21), .in2(instruction20:16), .writeaddr(addr_regwrite), .writedata(data_regwrite), .data1(data1),.data2(data2),.RegWrite(RegWrite);signal_extend s_extend(.in(instruction15:0), .out(signal_extend);mux #(32) mux2_ALU(.in1(signal_extend),.in0(data2),.out

18、(ALU2),.ctrl(ALUSrc);ALU ALU(.in1(data1),.in2(ALU2),.ALU_out(ALUout),.ctrl(ALUctrl),.zero(zero);data_mem data_mem(.addr(ALUout),.data(data2),.ctrl_read(MemRead), .out(memdata),.ctrl_write(MemWrite);mux #(32) mux3_datareg(.in1(memdata),.in0(ALUout),.out(data_regwrite),.ctrl(MemtoReg);left_shift lshif

19、t1(.in(signal_extend),.out(signal_extend_l);left_shift lshift2(.in(instruction),.out(jumpaddr_l);add add1(.in1(PC),.in2(32'b100), .out(PCnew);add add2(.in1(signal_extend_l),.in2(PCnew),.out(add2out);mux #(32) mux4_PCnew(.in0(PCnew),.in1(add2out),.out(mux4out),.ctrl(zero & Branch);/*/ mux #(3

20、2) mux5_PCnext(.in0(mux4out),.in1(jumpaddr),.out(PCnext),.ctrl(Jump);ALU_ctrl ALU_ctrl(.ALUOp(ALUOp),.funct(instruction5:0),.ALU_ctrl(ALUctrl);PC PC0(.clk(clk),.reset(reset),.PCnext(PCnext),.PC(PC);assign jumpaddr=PCnew31:28,jumpaddr_l27:0;endmodule第四部分 驗(yàn)證方案及結(jié)果分析1、加載存儲(chǔ)指令: lw $s1,immt($t7) 32'h08

21、: ins=6'b100011, 5'b00101, 5'b10001, 16'h0001;其中immt($t7)指向的內(nèi)存地址中存的數(shù)為32b0101 / sw $s0,immt($t7) 32'h04: ins=6'b101011, 5'b00101, 5'b00101, 16'h0001;其中$s0寄存器中存的值為32b1000,$t7存的數(shù)據(jù)32h001c2、算術(shù)邏輯運(yùn)算:加法指令:add $s0, $a1, $t732'h00: ins=6'b000000, 5'b00101, 5'

22、;b01111, 5'b10000, 5'b00000, 6'b100000;其中 $a1存的數(shù)據(jù)是32h001c,$t7存的數(shù)據(jù)是32h0001減法指令:sub $s0, $a1, $t732'h00: ins=6'b000000, 5'b00101, 5'b01111, 5'b10000, 5'b00000, 6'b100010;其中 $a1存的數(shù)據(jù)是32h001c,$t7存的數(shù)據(jù)是32h0004與運(yùn)算:and $s0, $a1, $t732'h00: ins=6'b000000, 5'

23、b00101, 5'b01111, 5'b10000, 5'b00000, 6'b100100;其中 $a1存的數(shù)據(jù)是32h001c,$t7存的數(shù)據(jù)是32h0004或運(yùn)算or $s0, $a1, $t732'h00: ins=6'b000000, 5'b00101, 5'b01111, 5'b10000, 5'b00000, 6'b100101;其中 $a1存的數(shù)據(jù)是32h001c,$t7存的數(shù)據(jù)是32h0004Slt運(yùn)算:slt $s0, $a1, $t732'h00: ins=6'b00

24、0000, 5'b00101, 5'b01111, 5'b10000, 5'b00000, 6'b101010;其中 $a1存的數(shù)據(jù)是32h001c,$t7存的數(shù)據(jù)是32h00043、分支指令:bne $s0, $s1, start32'h04: ins=6'b000100, 5'b10000, 5'b10001, 16'b0100;其中$s0=$s2=32h000c4、跳轉(zhuǎn):J 100032'h04: ins=6'b000010, 26'h08;第五部分 性能評(píng)估:綜合結(jié)果:面積報(bào)告:*R

25、eport : areaDesign : topVersion: C-2009.06Date : Tue Sep 4 15:27:35 2012*Library(s) Used: typical (File: /export/homeO1/smic018/typical.db)Number of ports: 103Number of nets: 634Number of cells: 156Number of references: 30Combinational area: 73589.947530Noncombinational area: 48009.932091Net Interco

26、nnect area: 518795.906769Total cell area: 121599.879621Total area: 640395.786390時(shí)序報(bào)告:*Report : timing -path full -delay max -max_paths 1Design : topVersion: C-2009.06Date : Tue Sep 4 15:27:46 2012*Operating Conditions: typical Library: typicalWire Load Model Mode: top Startpoint: PC0/PC_reg21 (risin

27、g edge-triggered flip-flop clocked by clk) Endpoint: data_regwrite25 (output port clocked by clk) Path Group: clk Path Type: max Des/Clust/Port Wire Load Model Library - top smic18_wl10 typical Point Incr Path - clock clk (rise edge) 0.00 0.00 clock network delay (ideal) 0.00 0.00 PC0/PC_reg21/CK (D

28、FFRHQX4) 0.00 0.00 r PC0/PC_reg21/Q (DFFRHQX4) 0.22 0.22 r PC0/PC21 (PC) 0.00 0.22 r ins_reg/pc21 (instruction_reg) 0.00 0.22 r ins_reg/U53/Y (NOR2X4) 0.06 0.28 f ins_reg/U37/Y (NAND4X4) 0.11 0.39 r ins_reg/U55/Y (NOR2X4) 0.05 0.44 f ins_reg/U56/Y (NAND2X4) 0.08 0.52 r ins_reg/U38/Y (BUFX20) 0.10 0.

29、63 r ins_reg/U31/Y (NOR2X4) 0.06 0.69 f ins_reg/ins28 (instruction_reg) 0.00 0.69 f con/in2 (control) 0.00 0.69 f con/U29/Y (NOR2X4) 0.09 0.78 r con/U33/Y (NAND3X4) 0.06 0.84 f con/U34/Y (NOR2X4) 0.10 0.94 r con/RegDst (control) 0.00 0.94 r mux1_datareg/ctrl (mux_N5) 0.00 0.94 r mux1_datareg/U1/Y (B

30、UFX20) 0.10 1.05 r mux1_datareg/U10/Y (OAI2BB2X4) 0.13 1.17 r mux1_datareg/out1 (mux_N5) 0.00 1.17 r U25/Y (BUFX16) 0.10 1.28 r data_reg/writeaddr1 (data_reg) 0.00 1.28 r data_reg/U368/Y (NAND2BX4) 0.12 1.39 r data_reg/U365/Y (INVX8) 0.05 1.44 f data_reg/U362/Y (INVX8) 0.06 1.50 r data_reg/U265/Y (O

31、R2X4) 0.09 1.59 r data_reg/U101/Y (AND2X4) 0.10 1.69 r data_reg/U306/Y (NAND2X4) 0.06 1.74 f data_reg/U377/Y (NOR2X4) 0.09 1.83 r data_reg/U295/Y (NOR2X4) 0.05 1.88 f data_reg/data21 (data_reg) 0.00 1.88 f mux2_ALU/in01 (mux_N32_0) 0.00 1.88 f mux2_ALU/U68/Y (OAI2BB1X4) 0.18 2.06 f mux2_ALU/out1 (mu

32、x_N32_0) 0.00 2.06 f ALU/in21 (ALU) 0.00 2.06 f ALU/add_35/B1 (ALU_DW01_add_1) 0.00 2.06 f ALU/add_35/U472/Y (OR2X4) 0.17 2.23 f ALU/add_35/U582/Y (NAND2X4) 0.08 2.30 r ALU/add_35/U385/Y (NAND2X4) 0.05 2.35 f ALU/add_35/U329/Y (AOI21X4) 0.12 2.48 r ALU/add_35/U288/Y (OAI21X4) 0.07 2.55 f ALU/add_35/

33、U571/Y (AOI21X4) 0.14 2.69 r ALU/add_35/U632/Y (BUFX20) 0.14 2.83 r ALU/add_35/U486/Y (INVX8) 0.05 2.87 f ALU/add_35/U481/Y (NAND2BX4) 0.07 2.94 r ALU/add_35/U604/Y (NAND2X4) 0.05 2.99 f ALU/add_35/U605/Y (XOR2X4) 0.15 3.14 r ALU/add_35/SUM25 (ALU_DW01_add_1) 0.00 3.14 r ALU/U49/Y (AOI21X4) 0.05 3.1

34、9 f ALU/U147/Y (OAI2BB1X4) 0.12 3.31 r ALU/ALU_out25 (ALU) 0.00 3.31 r mux3_datareg/in025 (mux_N32_3) 0.00 3.31 r mux3_datareg/U33/Y (OAI2BB1X4) 0.12 3.44 r mux3_datareg/out25 (mux_N32_3) 0.00 3.44 r data_regwrite25 (out) 0.00 3.44 r data arrival time 3.44 clock clk (rise edge) 3.00 3.00 clock netwo

35、rk delay (ideal) 0.00 3.00 output external delay -0.20 2.80 data required time 2.80 - data required time 2.80 data arrival time -3.44 - slack (VIOLATED) -0.64第六部分 通用異步串行收發(fā)器設(shè)計(jì)與實(shí)現(xiàn)(注:此部分由于自己設(shè)計(jì)代碼報(bào)錯(cuò)一直無(wú)法調(diào)出,部分源代碼參考elecfans論壇)一、設(shè)計(jì)思路串口即通用異步收發(fā)器(UART,Universal Asynchronous Receiver Transmitter)是一種能同時(shí)支持近距離和遠(yuǎn)距離傳

36、輸?shù)漠惒酱薪涌冢怯?jì)算機(jī)中最普遍通用的一部分,被廣泛應(yīng)用微機(jī)和外設(shè)的數(shù)據(jù)交換,例如鼠標(biāo),調(diào)制解調(diào)器,打印機(jī)之間以及微機(jī)與微機(jī)之間的串行書數(shù)據(jù)傳輸。應(yīng)為異步串行通信接口具有傳輸線少,成本低,可靠性高,實(shí)現(xiàn)簡(jiǎn)單等優(yōu)點(diǎn),應(yīng)此在PC和外設(shè)之間的串行通信中得到廣泛的應(yīng)用,同時(shí)在當(dāng)今的嵌入式微處理器芯片的設(shè)計(jì)中,異步串行通信接口成為不可缺少的一部分。根據(jù)系統(tǒng)整體設(shè)計(jì)要求, 串口即通用異步收發(fā)器主要是由uart發(fā)送模塊和接收模塊,modem控制模塊四部分組成,如圖1所示。UART功能模塊二、模塊概述1)下圖是發(fā)送器結(jié)構(gòu)圖其主要的功能是 :由CPU送來的待發(fā)送的并行數(shù)據(jù),首先寫入發(fā)送FIFO。發(fā)送FIFO中

37、有數(shù)據(jù)帶發(fā)送時(shí)。數(shù)據(jù)自動(dòng)裝入移位寄存器(tsr)并總動(dòng)完成并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并完成串行數(shù)據(jù)的發(fā)送。發(fā)送器結(jié)構(gòu)圖2)下圖是接收器結(jié)構(gòu)圖。其主要功能是:接受移位接收寄存器和接受控制邏輯工程。接受器將外部串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),發(fā)送給接受FIFO。接受過程中,按照數(shù)據(jù)格式進(jìn)行字符裝備,濾除噪音,對(duì)數(shù)據(jù)位進(jìn)行溢出錯(cuò),奇偶校驗(yàn)錯(cuò),楨格錯(cuò)誤,終止錯(cuò)誤等檢驗(yàn)。并根據(jù)檢驗(yàn)產(chǎn)生響應(yīng)中斷和狀態(tài)信息,傳給接口模塊。接收器結(jié)構(gòu)圖3)下圖是Modem模塊單元圖其主要功能是:它提供了一組通用RS-232的控制信號(hào),是的UART可以直接和(modem)連接,實(shí)現(xiàn)CPU與外接設(shè)備的通信。Modem模塊單元圖 4)下圖是

38、波特率發(fā)生器結(jié)構(gòu)圖其主要功能是:提供UART通信時(shí)所需要的時(shí)鐘,驅(qū)動(dòng)發(fā)送器邏輯和接收器邏輯,產(chǎn)生于16倍的波特率,主要是對(duì)系統(tǒng)主頻MCLK分頻得到的。三 模塊代碼1)UART發(fā)送模塊module uarttx(clk, datain, wrsig, idle, tx);input clk; /UART時(shí)鐘input 7:0 datain; /需要發(fā)送的數(shù)據(jù)input wrsig; /發(fā)送命令,上升沿有效output idle; /線路狀態(tài)指示,高為線路忙,低為線路空閑output tx; /發(fā)送數(shù)據(jù)信號(hào)reg idle, tx;reg send;reg wrsigbuf, wrsigrise;

39、reg presult;reg7:0 cnt; /計(jì)數(shù)器parameter paritymode = 1'b0;/檢測(cè)發(fā)送命令是否有效always (posedge clk)beginwrsigbuf <= wrsig;wrsigrise <= (wrsigbuf) & wrsig;endalways (posedge clk)beginif (wrsigrise && (idle) /當(dāng)發(fā)送命令有效且線路為空閑時(shí),啟動(dòng)新的數(shù)據(jù)發(fā)送進(jìn)程beginsend <= 1'b1;endelse if(cnt = 8'd176) /一幀資

40、料發(fā)送結(jié)束beginsend <= 1'b0;endendalways (posedge clk)beginif(send = 1'b1)begincase(cnt) /產(chǎn)生起始位8'd0:begintx <= 1'b0;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd16:begintx <= datain0; /發(fā)送數(shù)據(jù)0位presult <= datain0paritymode;idle <= 1'b1;cnt <= cnt + 8'd1;en

41、d8'd32:begintx <= datain1; /發(fā)送數(shù)據(jù)1位presult <= datain1presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd48:begintx <= datain2; /發(fā)送數(shù)據(jù)2位presult <= datain2presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd64:begintx <= datain3; /發(fā)送數(shù)據(jù)3位presult <= datain3pres

42、ult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd80:begintx <= datain4; /發(fā)送數(shù)據(jù)4位presult <= datain4presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd96:begintx <= datain5; /發(fā)送數(shù)據(jù)5位presult <= datain5presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd112:beg

43、intx <= datain6; /發(fā)送數(shù)據(jù)6位presult <= datain6presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd128:begintx <= datain7; /發(fā)送數(shù)據(jù)7位presult <= datain7presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd144:begintx <= presult; /發(fā)送奇偶校驗(yàn)位presult <= datain0paritymode;idle

44、 <= 1'b1;cnt <= cnt + 8'd1;end8'd160:begintx <= 1'b1; /發(fā)送停止位 idle <= 1'b1;cnt <= cnt + 8'd1;end8'd176:begintx <= 1'b1; idle <= 1'b0; /一幀資料發(fā)送結(jié)束cnt <= cnt + 8'd1;enddefault:begincnt <= cnt + 8'd1;endendcaseendelsebegintx <= 1

45、9;b1;cnt <= 8'd0;idle <= 1'b0;endendendmodule為了測(cè)試UART發(fā)送模塊的正確性,需要編寫一個(gè)測(cè)試模塊來測(cè)試UART發(fā)送模塊,Verilog HDL語(yǔ)言代碼如下:module testuart(clk, dataout, wrsig);input clk;output7:0 dataout;output wrsig;reg 7:0 dataout;reg wrsig;reg 7:0 cnt;always (posedge clk)beginif(cnt = 254)begindataout <= dataout + 8

46、'd1; /每次數(shù)據(jù)加“1”wrsig <= 1'b1; /產(chǎn)生發(fā)送命令cnt <= 8'd0;endelsebeginwrsig <= 1'b0;cnt <= cnt + 8'd1;endendendmodule UART發(fā)送模塊的波形仿真報(bào)告波形仿真報(bào)告說明:分析看出,當(dāng)發(fā)送命令wrsig的上升沿有效時(shí),啟動(dòng)發(fā)送數(shù)據(jù)。串行數(shù)據(jù)的波形與發(fā)送數(shù)據(jù)dataout相一致,UART的發(fā)送模塊得到正確驗(yàn)證。2)UART接收模塊module uartrx(clk, rx, dataout, rdsig, dataerror, frameer

47、ror);input clk; /采樣時(shí)鐘input rx; /UART數(shù)據(jù)輸入output dataout; /接收數(shù)據(jù)輸出output rdsig;output dataerror; /資料出錯(cuò)指示output frameerror; /幀出錯(cuò)指示reg7:0 dataout;reg rdsig, dataerror;reg frameerror;reg 7:0 cnt;reg rxbuf, rxfall, receive;parameter paritymode = 1'b0;reg presult, idle;always (posedge clk) /檢測(cè)線路的下降沿begi

48、nrxbuf <= rx;rxfall <= rxbuf & (rx);endalways (posedge clk)beginif (rxfall && (idle) /檢測(cè)到線路的下降沿并且原先線路為空閑,啟動(dòng)接收數(shù)據(jù)進(jìn)程beginreceive <= 1'b1;endelse if(cnt = 8'd175) /接收數(shù)據(jù)完成beginreceive <= 1'b0;endendalways (posedge clk)beginif(receive = 1'b1)begincase (cnt)8'd0:beginidle <= 1'b1;cnt <= cnt + 8'd1;rdsig <= 1'b0;end8'd24: /接收第0位數(shù)據(jù)beginidle <= 1'b1;dataout0 <= rx;presult <= paritymoderx;cn

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論