北郵電子院專業(yè)實驗報告_第1頁
北郵電子院專業(yè)實驗報告_第2頁
北郵電子院專業(yè)實驗報告_第3頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、電子工程學院ASIC 專業(yè)實驗報告班級:姓名:學號:班內(nèi)序號:第一部分語言級仿真LAB 1:簡單的組合邏輯設計一、二、實驗目的掌握基本組合邏輯電路的實現(xiàn)方法。實驗原理本實驗中描述的是一個可綜合的二選一開關,它的功能是當sel = 0 時,給出out = a ,否則給出結果out =b。在Verilog HDL中,描述組合邏輯時常使用assign 結構。三、equal=(a=b)?1:0 是一種在組合邏輯實現(xiàn)分支判斷時常用的格式。parameter 定義的參數(shù)決定位寬。 測試模塊用于檢測模塊設計的是否正確,它給出模塊的輸入信號,模塊的內(nèi)部信號和輸出信號。源代碼size觀察module scale

2、_mux(out,sel,b,a);parameter size=1;outputsize-1:0 out;inputsize-1:0b,a;input sel;assign out = (!sel)?a:(sel)?b:size1'bx;endmoduledefine width 8timescale 1 ns/1 nsmodule mux_test;regwidth:1a,b;wirewidth:1out;reg sel;scale_mux#(width)m1(.out(out),.sel(sel),.b(b),.a(a);initialbegin$monitor($stime,&

3、quot;sel=%b a=%b b=%b out=%b",sel,a,b,out);$dumpvars(2,mux_test);sel=0;b=width1'b0;a=width1'b1;#5sel=0;b=width1'b1;a=width1'b0;#5sel=1;b=width1'b0;a=width1'b1;#5sel=1;b=width1'b1;a=width1'b0;#5 $finish;endendmodule四、仿真結果與波形LAB 2:簡單時序邏輯電路的設計一、實驗目的掌握基本時序邏輯電路的實現(xiàn)。二、實

4、驗原理在 Verilog HDL 中,相對于組合邏輯電路,時序邏輯電路也有規(guī)定的表述方式。在可綜合的 Verilog HDL 模型中, 我們常使用 always塊和 (posedge clk)或 (negedge clk)的結構來表述時序邏輯。在 always塊中,被賦值的信號都必須定義為 reg 型,這是由時序邏輯電路的特點所決定的對于 reg 型數(shù)據(jù),如果未對它進行賦值,仿真工具會認為它是不定態(tài)。為了正確地觀三、察到仿真結果,在可綜合的模塊中我們通常定義一個復位信號rst-,當它為低電平時對電路中的寄存器進行復位。源代碼timescale 1 ns/100 psmodule counter

5、(cnt,clk,data,rst_,load);output4:0cnt ;input 4:0data;inputclk;inputrst_;inputload;reg4:0cnt;always(posedge clk or negedge rst_)if(!rst_)# cnt<=0;elseif(load)cnt<=#3 data;elsecnt<=#4 cnt + 1;endmoduletimescale 1 ns/1 nsmodule counter_test;wire4:0cnt;reg 4:0data;regrst_;regload;regclk;counter

6、 c1(t (cnt),.clk (clk),.data(data),.rst_(rst_),.load(load);initial beginclk=0;forever begin#10 clk=1'b1;#10 clk=1'b0;endendinitialbegin$timeformat(-9,1,"ns",9);$monitor("time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b",$stime,data,clk,rst_,load,cnt);$dumpvars(2,counter_test

7、);endtask expect;input 4:0expects;if(cnt !=expects)begin$display("At time %t cnt is %b and should be %b",$time,cnt,expects);$display("TEST FAILED");$finish;endendtaskinitialbegin(negedge clk)rst_,load,data=7'b0_X_XXXXX;(negedge clk)expect(5'h00); rst_,load,data=7'b1_1

8、_11101;(negedge clk)expect(5'h1D);rst_,load,data=7'b1_0_11101;repeat(5)(negedge clk);expect(5'h02);rst_,load,data=7'b1_1_11111;(negedge clk)expect(5'h1F); rst_,load,data=7'b0_X_XXXXX;(negedge clk)expect(5'h00);$display("TEST PASSED");$finish;endendmodule四、仿真結果與波

9、形五、思考題該電路中, rst-是同步還是異步清零端?在的 always塊中 reset 沒有等時鐘,而是直接清零。所以是異步清零端。LAB 3:簡單時序邏輯電路的設計一、二、三、實驗目的使用預定義的庫元件來設計八位寄存器。實驗原理八位寄存器中,每一位寄存器由一個二選一MUX 和一個觸發(fā)器dffr 組成,當load=1 ,裝載數(shù)據(jù);當load=0 ,寄存器保持。對于處理重復的電路,可用數(shù)組條用的方式,使電路描述清晰、簡潔。源代碼timescale 1 ns /1 nsmodule clock(clk);reg clk;output clk;initial beginclk=0;forever

10、begin#10 clk=1'b1;#10 clk=1'b0;endendendmodulemux 及 dffr 模塊調(diào)用代碼mux mux7(.out(n17),.sel(load),.b(data7),.a(out7);dffr dffr7(.q(out7),.d(n17),.clk(clk),.rst_(rst_);mux mux6(.out(n16),.sel(load),.b(data6),.a(out6);dffr dffr6(.q(out6),.d(n16),.clk(clk),.rst_(rst_);mux mux5(.out(n15),.sel(load),.

11、b(data5),.a(out5);dffr dffr5(.q(out5),.d(n15),.clk(clk),.rst_(rst_);mux mux4(.out(n14),.sel(load),.b(data4),.a(out4);dffr dffr4(.q(out4),.d(n14),.clk(clk),.rst_(rst_);mux mux3(.out(n13),.sel(load),.b(data3),.a(out3);dffr dffr3(.q(out3),.d(n13),.clk(clk),.rst_(rst_);mux mux2(.out(n12),.sel(load),.b(d

12、ata2),.a(out2);dffr dffr2(.q(out2),.d(n12),.clk(clk),.rst_(rst_);mux mux1(.out(n11),.sel(load),.b(data1),.a(out1);dffr dffr1(.q(out1),.d(n11),.clk(clk),.rst_(rst_);mux mux0(.out(n10),.sel(load),.b(data0),.a(out0);dffr dffr0(.q(out0),.d(n10),.clk(clk),.rst_(rst_);例化寄存器register r1(.data(data),.out(out

13、),.load(load),.clk(clk),.rst_(rst_);例化時鐘clock c1(.clk(clk);添加檢測信號initialbegin$timeformat(-9,1,"ns",9);$monitor("time=%t,clk=%b,data=%h,load=%b,out=%h",$stime,clk,data,load,out);$dumpvars(2,register_test);end四、仿真結果與波形LAB 4:用 always塊實現(xiàn)較復雜的組合邏輯電路一、實驗目的掌握用 always 實現(xiàn)組合邏輯電路的方法;了解 assig

14、n與 always兩種組合邏輯電路實現(xiàn)方法之間的區(qū)別。二、實驗原理僅使用 assign結構來實現(xiàn)組合邏輯電路,在設計中會發(fā)現(xiàn)很多地方顯得冗長且效率低下。適當?shù)厥褂胊lways來設計組合邏輯,會更具實效。本實驗描述的是一個簡單的ALU 指令譯碼電路的設計示例。它通過對指令的判斷,對輸入數(shù)據(jù)執(zhí)行相應的操作,包括加、減、或和傳數(shù)據(jù),并且無論是指令作用的數(shù)據(jù)還是指令本身發(fā)生變化,結果都要做出及時的反應。示例中使用了電平敏感的always塊,電平敏感的觸發(fā)條件是指在后括號內(nèi)電平列表的任何一個電平發(fā)生變化就能觸發(fā)always 塊的動作,并且運用了case結構來進行分支判斷。在 always 中適當運用de

15、fault(在 case 結構中)和else(子 ifelse結構中),通??梢跃C合為純組合邏輯,盡管被賦值的變量一定要定義為reg 型。如果不使用default或 else對缺省項進行說明,易產(chǎn)生意想不到的鎖存器。三、源代碼電路描述always(opcode or data or accum)beginif(accum=8'b00000000)# zero=1;else# zero=0;case(opcode)PASS0: # out =accum;PASS1: # out =accum;ADD: # out = data + accum;AND: # out =data&a

16、ccum;XOR: # out =dataaccum;PASSD: # out=data;PASS6:# out=accum;PASS7:# out=accum;default:# out=8'bx;endcaseend四、仿真結果與波形LAB 5:存儲器電路的設計一、二、三、實驗目的設計和測試存儲器電路。實驗原理本實驗中,設計一個模塊名為mem 的存儲器仿真模型,該存儲器具有雙線數(shù)據(jù)總線及異步處理功能。由于數(shù)據(jù)是雙向的,所以要注意,對memory 的讀寫在時序上要錯開。源代碼自行添加的代碼assign data= (read)?memoryaddr:8'hZ;always (

17、posedge write)beginmemoryaddr<=data7:0;end四、仿真結果與波形LAB 6:設計時序邏輯時采用阻塞賦值與非阻塞賦值的區(qū)別一、實驗目的明確掌握阻塞賦值與非阻塞賦值的概念和區(qū)別;了解阻塞賦值的使用情況。二、實驗原理三、在 always塊中,阻塞賦值可以理解為賦值語句是順序執(zhí)行的,而非阻塞賦值可以理解為并發(fā)執(zhí)行的。 實際時序邏輯設計中,一般情況下非阻塞賦值語句被更多的使用,有時為了在同一周期實現(xiàn)相互關聯(lián)的操作,也使用阻塞賦值語句。源代碼timescale 1 ns/ 100 psmodule blocking(clk,a,b,c);output3:0b,c

18、;input 3:0a;inputclk;reg3:0b,c;always(posedge clk)beginb =a;c =b;$display("Blocking: a=%d,b=%d,c=%d.",a,b,c);endendmoduletimescale 1 ns/ 100 psmodule non_blocking(clk,a,b,c);output3:0 b,c;input3:0 a;input clk;reg 3:0b,c;always (posedge clk)beginb<=a;c<=b;$display("Non_blocking:a

19、=%d,b=%d,c=%d",a,b,c);endendmoduletimescale 1 ns/ 100 psmodule compareTop;wire 3:0 b1,c1,b2,c2;reg3:0a;reg clk;initialbeginclk=0;forever #50 clk=clk;endinitial$dumpvars (2,compareTop);initialbegina=4'h3;$display("_");# 100 a =4'h7;$display("_");# 100 a =4'hf;$dis

20、play("_");# 100 a =4'ha;$display("_");# 100 a =4'h2;$display("_");# 100 $display("_"); $finish;endnon_blocking nonblocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1);endmodule四、仿真結果與波形LAB 7:利用有限狀態(tài)機進行復雜時序邏輯的設計一、實驗目的掌握利用有限狀態(tài)機(FSM)實現(xiàn)復雜時序邏輯的方法。二、實驗原理控制器是

21、CPU 的控制核心,用于產(chǎn)生一系列的控制信號,啟動或停止某些部件。何時進行讀指令,何時進行RAM 和 I/O端口的讀寫操作等,都由控制器來控制。三、源代碼補充代碼CPUnexstate<=state+1'h01;case(state)1:begin sel=1;rd=0;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end2:begin sel=1;rd=1;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end3:begin sel=1;rd=1;ld_ir

22、=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end4:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end5:begin sel=0;rd=0;ld_ir=0;inc_pc=1;ld_pc=0;data_e=0;ld_ac=0;wr=0; if(opcode=HLT)halt=1;end6:begin sel=0;rd=alu_op;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end

23、7:begin sel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=0;wr=0; if(opcode=SKZ)inc_pc<=zero;if(opcode=JMP)ld_pc=1;end0:beginsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=alu_op;inc_pc=(opcode=SKZ)&zero|(opcode=JMP);if(opcode=JMP)ld_pc=1;if(opcode=STO)wr=1;endNo.00000000No.00000000No.

24、00000101No.00000001/1CTEMP:/1temporary variable00000001/1Dtime:/ 1constant 144 - max value00000110/1E LIMIT:/ 6constant 1一、仿真結果與波形第二部分電路綜合一、實驗目的掌握邏輯綜合的概念和流程,熟悉采用Design Compiler 進行邏輯綜合的基本方法。二、實驗內(nèi)容采用 SYNOPSYS 公司的綜合工具Design Compiler 對實驗 7 的做綜合。三、源代碼與實驗指導書中相同。四、門級電路仿真結果與波形五、思考題1. 文件是 verilog 語言及的描述還是結構化的描述?是結構化的描述。2. 文件中,對觸發(fā)器的延遲包括哪些信息?包括對邏輯單元和管腳的上升 / 下降時延的最大值、最小值和典型值。第三部分版圖設計一、二、三、實驗目的掌握版圖設計的基本概念和流程,熟悉采用實驗內(nèi)容對電路綜合輸出的門級網(wǎng)表

溫馨提示

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

評論

0/150

提交評論