版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 集成電路設(shè)計(jì)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題 目: E1數(shù)據(jù)存儲(chǔ)和讀取 </p><p> 院 系: 電子工程學(xué)院 </p><p> 專業(yè)班級(jí): </p><p&g
2、t; 學(xué) 號(hào): </p><p> 姓 名: </p><p> 導(dǎo)師姓名: </p><p> 報(bào)告日期: </p><p><b> 設(shè)計(jì)概述</b></p><p><b> E1數(shù)據(jù)存儲(chǔ)和讀取</b>
3、</p><p><b> 設(shè)計(jì)任務(wù)</b></p><p> 本設(shè)計(jì)用電路實(shí)現(xiàn)把輸入的E1數(shù)據(jù)碼流0到31數(shù)據(jù)順序?qū)懭腚p口RAM中,以字節(jié)的形式輸入,時(shí)鐘頻率為256KHz,并以0到31循環(huán)寫,然后把數(shù)據(jù)分為4組,即:</p><p> 0 4 8 12 16 20 24 28</p><p>
4、 1 5 9 13 17 21 25 29</p><p> 2 6 10 14 18 22 26 30</p><p> 3 7 11 15 19 23 27 31</p><p> 每組以64KHz頻率按31到0的順序均勻循環(huán)連續(xù)輸出。</p><p><b> 設(shè)計(jì)目的<
5、;/b></p><p> 本設(shè)計(jì)主要實(shí)現(xiàn)E1數(shù)據(jù)的存儲(chǔ)和讀取,實(shí)現(xiàn)通信系統(tǒng)中數(shù)據(jù)的轉(zhuǎn)換和傳輸。這里我們只涉及到一路的E1數(shù)據(jù)流。</p><p><b> 使用軟件及環(huán)境設(shè)備</b></p><p> 本設(shè)計(jì)主要在windows環(huán)境下實(shí)現(xiàn)詳細(xì)設(shè)計(jì),在lniux環(huán)境下實(shí)現(xiàn)仿真,綜合和STA。使用的軟件如下</p>&l
6、t;p> 1)Modelsim6.1 實(shí)現(xiàn)Verilog HDL語(yǔ)言的設(shè)計(jì)和仿真。</p><p> 2)Synopsys公司的軟件有:</p><p> NC-Verilog 實(shí)現(xiàn)功能仿真和時(shí)序仿真;</p><p><b> DC實(shí)現(xiàn)邏輯綜合;</b></p><p> PT實(shí)現(xiàn)靜態(tài)時(shí)序分析。<
7、/p><p><b> 設(shè)計(jì)方案 </b></p><p> 本設(shè)計(jì)要求完成E1數(shù)據(jù)的存儲(chǔ)和讀取。根據(jù)要求,我們繪出頂層框圖。</p><p><b> 圖17 頂層框圖</b></p><p> 表9 top引腳定義</p><p><b> 設(shè)計(jì)定義 &l
8、t;/b></p><p> 根據(jù)設(shè)計(jì)需求,本設(shè)計(jì)共分為:</p><p> 時(shí)鐘模塊(div):用來(lái)提供整個(gè)系統(tǒng)中的各種時(shí)鐘信號(hào);</p><p> 數(shù)據(jù)轉(zhuǎn)換模塊(data_change):將串行數(shù)據(jù)轉(zhuǎn)換為8位的并行數(shù)據(jù),便于存儲(chǔ)了轉(zhuǎn)發(fā);</p><p> 雙口RAM模塊(ram_double):用來(lái)存儲(chǔ)數(shù)據(jù)流中的數(shù)據(jù),雙口R
9、AM便于存儲(chǔ)和讀取,此處我們?cè)O(shè)計(jì)的RAM的讀寫使用的是一個(gè)時(shí)鐘,即同步的RAM;</p><p> 讀地址模塊(rd_add):用來(lái)提供讀取數(shù)據(jù)的地址,從RAM中讀出要輸出的數(shù)據(jù);</p><p> 寫地址模塊(wr_add):用來(lái)產(chǎn)生存儲(chǔ)到RAM的地址;</p><p> 數(shù)據(jù)選擇模塊(choice):用來(lái)產(chǎn)生分組信息,將相應(yīng)的數(shù)據(jù)按要求存放到相應(yīng)的FIFO
10、中;</p><p> FIFO模塊:將數(shù)據(jù)存儲(chǔ)按要求分為四組,F(xiàn)IFO用來(lái)存儲(chǔ)這四組數(shù)據(jù);</p><p> 比較輸出模塊(compare):將FIFO中的數(shù)據(jù)按照要求順序輸出。</p><p><b> 共八個(gè)模塊。</b></p><p> 模塊結(jié)構(gòu)關(guān)系如下圖所示:</p><p>
11、 3.1分頻模塊(div)</p><p> 功能描述:本模塊完成系統(tǒng)時(shí)鐘(4096MHz)的分頻,分別產(chǎn)生2048MHz,512MHz,256MHz的時(shí)鐘。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p><b> 圖1 分頻模塊框圖</b></p><p><b&
12、gt; 引腳定義:</b></p><p> 表1 分頻模塊引腳定義</p><p><b> 時(shí)序圖</b></p><p> 圖2 分頻模塊時(shí)序圖</p><p> 3.2數(shù)據(jù)轉(zhuǎn)換模塊(data_change)</p><p> 功能描述:本模塊實(shí)現(xiàn)把一位的二進(jìn)制數(shù)轉(zhuǎn)換
13、成八位的二進(jìn)制數(shù)。當(dāng)sign信號(hào)有效時(shí),讀出數(shù)據(jù)。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p> 圖3 數(shù)據(jù)轉(zhuǎn)換模塊框圖</p><p><b> 引腳定義:</b></p><p> 表2 數(shù)據(jù)轉(zhuǎn)換模塊引腳定義</p><p><b>
14、; 時(shí)序圖:</b></p><p> 圖4 數(shù)據(jù)轉(zhuǎn)換模塊時(shí)序圖</p><p> 3.3雙口RAM模塊(ram_double)</p><p> 功能描述:本模塊實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和讀取。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p> 圖5 RAM模塊框
15、圖</p><p><b> 引腳定義:</b></p><p> 表3 RAM模塊引腳定義</p><p><b> 時(shí)序圖:</b></p><p> 圖6 RAM模塊時(shí)序圖</p><p> 3.4讀地址模塊(Rd_add)</p><p&
16、gt; 功能描述:本模塊實(shí)現(xiàn)對(duì)ram_double模塊讀數(shù)據(jù)的地址的操作。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p> 圖7 rd_add模塊框圖</p><p> 表4 引腳定義:表7 rd_add模塊引腳定義</p><p><b> 時(shí)序圖:</b></
17、p><p> 圖8 rd_add模塊時(shí)序圖</p><p> 3.5寫地址模塊(wr_add)</p><p> 功能描述:本模塊實(shí)現(xiàn)對(duì)ram_double模塊寫數(shù)據(jù)的地址的操作。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p> 圖9 wr_add模塊框圖</p&g
18、t;<p><b> 引腳定義:</b></p><p> 表5 wr_add模塊引腳定義</p><p><b> 時(shí)序圖:</b></p><p> 圖10 wr_add模塊時(shí)序圖</p><p> 3.6數(shù)據(jù)選擇模塊(choice)</p><p&g
19、t; 功能描述:本模塊實(shí)現(xiàn)對(duì)ram讀出的數(shù)據(jù)進(jìn)行分別存儲(chǔ)到四個(gè)FIFO(0-3)里,以便并行輸出。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p> 圖11 choice模塊框圖</p><p><b> 引腳定義:</b></p><p> 表6 choice模塊引腳定
20、義</p><p><b> 時(shí)序圖:</b></p><p> 圖12 choice模塊時(shí)序圖</p><p> 3.7 FIFO模塊</p><p> 功能描述:本模塊實(shí)現(xiàn)數(shù)據(jù)的緩存功能功能。</p><p><b> 電路設(shè)計(jì)框圖:</b></p>
21、<p> 圖 13 FIFO模塊框圖</p><p><b> 引腳定義:</b></p><p> 表7 FIFO模塊引腳定義</p><p><b> 時(shí)序圖:</b></p><p> 圖 14 FIFO模塊時(shí)序圖</p><p> 3.8比
22、較輸出模塊(compare)</p><p> 功能描述:本模塊實(shí)現(xiàn)四組數(shù)據(jù)的輸出。每組以64KHz頻率按31到0的順序均勻循環(huán)連續(xù)輸出。</p><p><b> 電路設(shè)計(jì)框圖:</b></p><p> 圖15 compare模塊框圖</p><p><b> 引腳定義:</b><
23、/p><p> 表8 compare模塊引腳定義</p><p><b> 時(shí)序圖:</b></p><p> 圖16 compare模塊時(shí)序圖</p><p><b> 綜合電路圖</b></p><p><b> 設(shè)計(jì)流程及結(jié)果</b><
24、/p><p><b> 5.1設(shè)計(jì)輸入</b></p><p> 電路設(shè)計(jì),頂層、各子模塊的設(shè)計(jì)源代碼</p><p><b> 1)頂層設(shè)計(jì)代碼:</b></p><p> module information(clk,rst,data_E1,data_out);</p><
25、;p> input clk;</p><p> input rst;</p><p> input data_E1;</p><p> output[7:0]data_out;</p><p> wire clk_2048,clk_256,clk_512;</p><p> wire[5:0] rda
26、ddress;</p><p> wire wren;</p><p> wire[5:0] wraddress;</p><p> wire[7:0] data_change;</p><p> wire[3:0]full;</p><p> wire[3:0]flag;</p><p&
27、gt; wire[7:0]data0,data1,data2,data3;</p><p> wire[3:0]empty;</p><p> wire[7:0]data_out0,data_out1,data_out2,data_out3;</p><p> wire[7:0]data_ram;</p><p> div
28、mydiv(.clk(clk),.rst(rst),.clk_2048(clk_2048),</p><p> .clk_256(clk_256),.clk_512(clk_512));</p><p> rd_add myrd_add(.clk(clk_2048),.rst(rst),</p><p> .rd_add(rdaddress),.rden(wr
29、en));</p><p> wr_add mywr_add(.clk(clk_2048),.rst(rst),</p><p> .wren(wren), .wr_add(wraddress));</p><p> data_change mydata_change(.data(data_E1), .clk(clk),.rst(rst),</p>
30、<p> .data_out(data_change),.sign(wren));</p><p> choice mychoice(.clk(clk_256),.rst(rst),.flag(flag),</p><p> .data_in(data_ram),.rdaddress(rdaddress),</p><p> .data0(da
31、ta0),.data1(data1),.data2(data2),</p><p> .data3(data3),.full(full),.rden(wren));</p><p> compare mycompare(.clk(clk_256),.rst(rst),.flag(flag[0]),</p><p> .data_in0(data_out0),.
32、data_in1(data_out1),</p><p> .data_in2(data_out2),.data_in3(data_out3),</p><p> .data_out(data_out));</p><p> fifo123 myfifo0(.clk(clk_512),.data_in(data0),.rdreq(flag[0]),</p
33、><p> .wrreq(flag[0]),.empty(empty[0]), .full(full[0]),</p><p> .data_out(data_out0),.rst(rst));</p><p> fifo123 myfifo1(.clk(clk_512), .data_in(data1),.rdreq(flag[0]),</p>&
34、lt;p> .wrreq(flag[1]),.empty(empty[1]),.full(full[1]),</p><p> .data_out(data_out1),.rst(rst));</p><p> fifo123 myfifo2(.clk(clk_512),.data_in(data2),.rdreq(flag[0]),</p><p>
35、 .wrreq(flag[2]),.empty(empty[2]),.full(full[2]),</p><p> .data_out(data_out2),.rst(rst));</p><p> fifo123 myfifo3(.clk(clk_512),.data_in(data3),.rdreq(flag[0]),</p><p> .wrreq(f
36、lag[3]),.empty(empty[3]),.full(full[3]),</p><p> .data_out(data_out3),.rst(rst));</p><p> ram_double2 myram_double(.clock_wr(clk_2048),.clock_rd(clk_2048),</p><p> .data(data_cha
37、nge),.rdaddress(rdaddress),</p><p> .wraddress(wraddress),.wren(wren),</p><p> .q(data_ram));</p><p><b> Endmodule</b></p><p><b> 2)個(gè)子模塊代碼:</b&
38、gt;</p><p> module choice(clk,rst, data_in,rdaddress,data0,data1,data2,data3,flag,full,rden);</p><p> input rden;</p><p> input[7:0] data_in;</p><p> input[5:0] rda
39、ddress;</p><p> input clk,rst;</p><p> input[3:0] full;</p><p> output reg[3:0] flag;</p><p> output reg[7:0] data0,data1,data2,data3;</p><p> wire [5
40、:0]rd_add;</p><p> assign rd_add = rdaddress + 1'b1;</p><p> always@(posedge clk or negedge rst)begin</p><p> if(!rst)begin</p><p> flag <= 4'b0;</p&g
41、t;<p> data0 <= 8'd0;</p><p> data1 <= 8'd0;</p><p> data2 <= 8'b0;</p><p> data3 <= 8'b0;</p><p><b> end</b></p&
42、gt;<p> else begin</p><p> case(rd_add[1:0])</p><p> 2'b00:begin</p><p> if(!full[0])begin</p><p> flag <= 4'b0001;</p><p> data0 &
43、lt;= data_in;</p><p><b> end</b></p><p> else data0 <= data0;</p><p><b> end</b></p><p> 2'b01:begin</p><p> if(!ful
44、l[1])begin</p><p> flag <= 4'b0010;</p><p> data1 <= data_in;</p><p><b> end</b></p><p> else data1 <= data1;</p><p><b>
45、 end</b></p><p> 2'b10:begin</p><p> if(!full[2])begin</p><p> flag <= 4'b0100;</p><p> data2 <= data_in;</p><p><b> end<
46、;/b></p><p> else data2 <= data2;</p><p><b> end</b></p><p> 2'b11:begin</p><p> if(!full[3])begin</p><p> flag <= 4'b100
47、0;</p><p> data3 <= data_in;</p><p><b> end</b></p><p> else data3 <= data3;</p><p><b> end</b></p><p> default:begin<
48、;/p><p> flag <= 4'b0;</p><p><b> end</b></p><p><b> endcase</b></p><p><b> end</b></p><p><b> end</b
49、></p><p><b> endmodule</b></p><p> module compare(clk,rst,flag,data_in0,data_in1,data_in2,data_in3,data_out);</p><p> input clk;</p><p> input flag;&
50、lt;/p><p> input rst;</p><p> input[7:0] data_in0,data_in1,data_in2,data_in3;</p><p> output reg[7:0] data_out;</p><p> reg [7:0]ram[3:0];</p><p> always
51、@(posedge clk or negedge rst)begin</p><p> if(!rst)begin</p><p> ram[3] <= 8'b0;</p><p> ram[2] <= 8'b0;</p><p> ram[1] <= 8'b0;</p><
52、;p> ram[0] <= 8'b0;</p><p><b> end</b></p><p> else begin</p><p> if(flag == 1'b1)begin</p><p> ram[3] <= data_in3;</p><p&g
53、t; ram[2] <= data_in2;</p><p> ram[1] <= data_in1;</p><p> ram[0] <= data_in0;</p><p><b> end</b></p><p> else begin</p><p> ram
54、[3] <= ram[3];</p><p> ram[2] <= ram[2];</p><p> ram[1] <= ram[1];</p><p> ram[0] <= ram[0];</p><p><b> end</b></p><p><b>
55、; end</b></p><p><b> end</b></p><p> reg [1:0]counter;</p><p> always@(posedge clk or negedge rst)begin</p><p> if(!rst)begin</p><p&
56、gt; data_out <= 8'b0;</p><p> counter <= 2'd1;</p><p><b> end</b></p><p> else begin</p><p> counter <= counter - 1'b1;</p>
57、<p> data_out <= ram[counter];</p><p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> module data_cha
58、nge(data,clk,rst,data_out,sign);</p><p> input clk,rst,data;</p><p> output reg[7:0] data_out;</p><p> output sign;</p><p> reg[2:0] count;</p><p><
59、b> reg sign;</b></p><p> always @(posedge clk or negedge rst)</p><p><b> begin</b></p><p> if(!rst) </p><p><b> begin</b></p&
60、gt;<p> count <= 3'b000;</p><p> sign <= 1'b0;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b>
61、</p><p> count <= count + 3'b001;</p><p> if(count == 3'b111)</p><p><b> begin</b></p><p> sign <= 1'b1;</p><p> count &
62、lt;= 3'b000;</p><p><b> end</b></p><p><b> else</b></p><p> sign <= 1'b0;</p><p><b> end</b></p><p>
63、;<b> end</b></p><p> always @(posedge clk or negedge rst)begin</p><p> if(!rst)begin</p><p> data_out <= 8'b0;</p><p><b> end</b><
64、;/p><p> else begin</p><p> data_out[0] <= data;</p><p> data_out[7:1] <= data_out[6:0];</p><p><b> end</b></p><p><b> end</
65、b></p><p> endmodule </p><p> module div(clk,rst,clk_2048,clk_256,clk_512);</p><p> input clk;</p><p> input rst;</p><p> output reg clk_2048;</
66、p><p> output reg clk_256;</p><p> output reg clk_512;</p><p> reg[1:0] counter_8;</p><p> reg[2:0] counter_16;</p><p> always@(posedge clk or negedge rs
67、t)begin</p><p> if(!rst)begin</p><p> counter_8 <= 3'b0;</p><p> clk_512 <= 1'b0;</p><p><b> end</b></p><p> else begin</
68、p><p> counter_8 <= counter_8 + 1'b1;</p><p> if(counter_8 == 2'd3)begin</p><p> clk_512 <= ~clk_512;</p><p> counter_8 <= 3'b0;</p><p&
69、gt;<b> end</b></p><p><b> end</b></p><p><b> end</b></p><p> always@(posedge clk or negedge rst)begin</p><p> if(!rst)begin<
70、/p><p> clk_2048 <= 1'b0;</p><p><b> end</b></p><p> else begin</p><p> clk_2048 <= ~clk_2048;</p><p><b> end</b></p
71、><p><b> end</b></p><p> always@(posedge clk or negedge rst)begin</p><p> if(!rst)begin</p><p> counter_16 <= 3'b0;</p><p> clk_256 &l
72、t;= 1'b0;</p><p><b> end</b></p><p> else begin</p><p> counter_16 <= counter_16 + 1'b1;</p><p> if(counter_16 == 3'd7)begin</p>&
73、lt;p> clk_256 <= ~clk_256;</p><p> counter_16 <= 3'b0;</p><p><b> end</b></p><p><b> end</b></p><p><b> end</b><
74、;/p><p><b> endmodule</b></p><p> module fifo123(clk,rst,empty,full,wrreq,rdreq,data_in,data_out);</p><p> input clk;</p><p> input rst;</p><p&g
75、t; input wrreq;</p><p> input rdreq;</p><p> input [7:0]data_in;</p><p> output wire empty;</p><p> output wire full;</p><p> output reg [7:0]data_ou
76、t;</p><p><b> reg flag;</b></p><p> reg [2:0]wrcnt;</p><p> reg [2:0]rdcnt;</p><p> reg [7:0]fifo[7:0];</p><p> always@(posedge clk or neg
77、edge rst)begin</p><p> if(!rst) begin</p><p> rdcnt<=3'b0;</p><p> wrcnt<=3'b0;</p><p> data_out<=8'b0;</p><p> flag<=1'b0
78、; </p><p><b> end</b></p><p> else case({wrreq,rdreq,full,empty})</p><p> 4'b1000: begin //write</p><p> fifo[wrcnt]<=data_in;</p&g
79、t;<p> wrcnt<=wrcnt+1;</p><p> flag<=1'b1;</p><p><b> end</b></p><p> 4'b1001:begin //write</p><p> fifo[wrcnt]<=data_i
80、n;</p><p> wrcnt<=wrcnt+1;</p><p> flag<=1'b1;</p><p><b> end</b></p><p> 4'b1101:begin //write</p><p> fifo[wrcnt]&
81、lt;=data_in;</p><p> wrcnt<=wrcnt+1;</p><p> flag<=1'b1;</p><p><b> end </b></p><p> 4'b0100:begin //read</p><p> da
82、ta_out<=fifo[rdcnt]; </p><p> rdcnt<=rdcnt+1;</p><p> flag<=1'b0;</p><p><b> end</b></p><p> 4'b0110:begin //read</p>
83、<p> data_out<=fifo[rdcnt]; </p><p> rdcnt<=rdcnt+1;</p><p> flag<=1'b0;</p><p><b> end</b></p><p> 4'b1110:begin //rea
84、d</p><p> data_out<=fifo[rdcnt]; </p><p> rdcnt<=rdcnt+1;</p><p> flag<=1'b0;</p><p><b> end</b></p><p> 4'b1100:begin
85、 //write and read</p><p> fifo[wrcnt]<=data_in;</p><p> wrcnt<=wrcnt+1;</p><p> flag<=1'b1;</p><p> data_out<=fifo[rdcnt]; </p><
86、p> rdcnt<=rdcnt+1;</p><p> flag<=1'b0;</p><p><b> end</b></p><p> default:begin</p><p> wrcnt<=wrcnt;</p><p> rdcnt<=r
87、dcnt;</p><p><b> end</b></p><p><b> endcase</b></p><p><b> end</b></p><p> assign full=(wrcnt==rdcnt)&flag;</p><p
88、> assign empty=(wrcnt==rdcnt)&~flag;</p><p><b> endmodule</b></p><p> module ram_double2(clock_wr,clock_rd,data,rdaddress,wraddress,wren,q);</p><p> input
89、 clock_wr;</p><p> input clock_rd;</p><p> input [7:0] data;</p><p> input [5:0] rdaddress; </p><p> input [5:0] wraddress;</p&
90、gt;<p> input wren;</p><p> output [7:0] q;</p><p> wire clock_wr;</p><p> wire clock_rd;</p><p> wire [7:0] data;</p><p> wire
91、 [5:0] rdaddress;</p><p> wire [5:0] wraddress;</p><p> wire wren;</p><p> reg [7:0] q;</p><p> reg [7:0] ram_double [63:0];</p><p> alwa
92、ys @(posedge clock_wr) begin</p><p> if(wren) ram_double[wraddress] <= data;</p><p> else ram_double[wraddress] <= ram_double[wraddress];</p><p><b> end</b><
93、;/p><p> always @(posedge clock_rd)begin</p><p><b> if(wren)</b></p><p> q <= ram_double[rdaddress];</p><p> else q <= q;</p><p><b&g
94、t; end</b></p><p><b> endmodule</b></p><p> module rd_add(clk,rst,rd_add,rden);</p><p> input clk;</p><p> input rst;</p><p> input
95、 rden;</p><p> output reg[5:0] rd_add;</p><p> always@(posedge clk or negedge rst)begin</p><p> if(!rst)begin</p><p> rd_add <= 6'd63; </p><p&g
96、t;<b> end</b></p><p> else begin</p><p><b> if(rden)</b></p><p> rd_add <= rd_add - 1'd1;</p><p> else rd_add <= rd_add;</p>
97、;<p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> module wr_add(clk, rst,wren,wr_add);</p><p> input
98、clk;</p><p> input rst;</p><p> input wren;</p><p> output reg [5:0]wr_add;</p><p> always @(posedge clk or negedge rst)begin</p><p> if(!rst)begin &l
99、t;/p><p> wr_add <= 6'b0;</p><p><b> end </b></p><p> else if(wren == 1'b1)begin</p><p> wr_add <= wr_add + 1'b1;</p><p>&l
100、t;b> end</b></p><p> else wr_add <= wr_add;</p><p><b> end</b></p><p><b> endmodule</b></p><p><b> 5.2設(shè)計(jì)仿真</b></
101、p><p><b> 1)仿真方案</b></p><p> 本設(shè)計(jì)我們采用分模塊設(shè)計(jì)分模塊驗(yàn)證的方法。針對(duì)每個(gè)模塊分別設(shè)計(jì)驗(yàn)證,分別寫驗(yàn)證代碼。如果每個(gè)模塊的都能通過(guò)驗(yàn)證,然后再把幾個(gè)模塊綜合起來(lái)一起驗(yàn)證。最后,再驗(yàn)證總體模塊。</p><p> 2)總體模塊及個(gè)模塊仿真激勵(lì)代碼,仿真結(jié)果以及結(jié)果的分析等;</p><p
102、> div模塊驗(yàn)證代碼:</p><p> module test_div;</p><p><b> reg clk;</b></p><p><b> reg rst;</b></p><p> wire clk_2048,clk_256;</p><p&
103、gt; div mydiv(.clk(clk),.rst(rst),.clk_2048(clk_2048),.clk_256(clk_256));</p><p><b> initial</b></p><p><b> begin</b></p><p><b> clk=1;</b>&l
104、t;/p><p><b> rst=1'b0;</b></p><p> #20 rst=1'b1;</p><p> forever #10 clk=~clk; </p><p><b> end</b></p><p><b> endmo
105、dule</b></p><p><b> 仿真結(jié)果:</b></p><p> 圖18div模塊仿真圖</p><p><b> 結(jié)果分析:</b></p><p> 有上圖得知。仿真結(jié)果和我們?cè)O(shè)計(jì)時(shí)序符合。</p><p> 2、data_chang
106、e模塊驗(yàn)證代碼:</p><p> module data_change_test;</p><p> reg clk,rst,data;</p><p> wire sign;</p><p> wire[7:0] data_out;</p><p> data_change A(.data(data),.
107、clk(clk), .rst(rst), .data_out(data_out), .sign(sign));</p><p> always #5 clk <= ~clk; </p><p> initial begin</p><p> #0 clk = 1'b0;rst = 1'b0;data = 1
108、9;b0;</p><p> #10 rst = 1'b1;data = 1'b1;</p><p> #10 data = 1'b0; </p><p> #10 data = 1'b1;</p><p> #10 data = 1'b0; </p><p>
109、#10 data = 1'b1;</p><p> #10 data = 1'b0; </p><p> #10 data = 1'b1;</p><p> #10 data = 1'b0; </p><p> #10 data = 1'b1;</p><p>
110、 #10 data = 1'b0; </p><p> #10 data = 1'b1;</p><p> end </p><p><b> endmodule</b></p><p><b> 仿真結(jié)果:</b></p><p>
111、 圖19data_change模塊仿真圖 </p><p><b> 結(jié)果分析:</b></p><p> 有上圖得知。仿真結(jié)果和我們?cè)O(shè)計(jì)完全符合。</p><p> rd_add模塊驗(yàn)證代碼:</p><p> module rd_add_test;</p><p><b>
112、 reg clk;</b></p><p><b> reg rst;</b></p><p><b> reg rden;</b></p><p> wire[5:0] rd_add;</p><p> rd_add rd(.clk(clk),.rst(rst), .rd_
113、add(rd_add), .rden(rden));</p><p> always #5 clk <= ~clk;</p><p> initial begin</p><p> #0 clk = 1'b0;</p><p> #0 rst = 1'b0;</p><p> rden
114、= 1'b0;</p><p> #10 rst = 1'b1;</p><p> #3 rden = 1'b1;</p><p> #700 rden = 1'b0;</p><p><b> end</b></p><p><b> endm
115、odule</b></p><p><b> 仿真結(jié)果:</b></p><p> 圖20 rd_add模塊仿真圖</p><p><b> 結(jié)果分析:</b></p><p> 有上圖得知。仿真結(jié)果和我們?cè)O(shè)計(jì)完全符合。</p><p> wr_add驗(yàn)
116、證代碼:</p><p> module test_wr_add;</p><p><b> reg clk;</b></p><p><b> reg rst;</b></p><p><b> reg wren;</b></p><p>
117、wire[5:0] wr_add;</p><p> wr_add wr(.clk(clk),.rst(rst), .wr_add(wr_add),.wren(wren));</p><p> always #3 clk <= ~clk;</p><p> initial begin</p><p> #0 clk = 1
118、9;b0;</p><p> #0 rst = 1'b0;</p><p> #5 wren = 1'b1;</p><p> #10 rst = 1'b1;</p><p> #700 wren = 1'b0;</p><p><b> end</b>&
119、lt;/p><p><b> endmodule</b></p><p><b> 仿真結(jié)果:</b></p><p> 圖21 wr_add模塊仿真圖</p><p><b> 結(jié)果分析:</b></p><p> 有上圖得知。仿真結(jié)果和我們?cè)O(shè)計(jì)
120、完全符合。</p><p> choice模塊仿真代碼:</p><p> module test_choice;</p><p><b> reg clk;</b></p><p><b> reg rst;</b></p><p><b> reg r
121、den;</b></p><p> wire[5:0] rd_add;</p><p> wire[3:0] flag;</p><p> reg[3:0] full;</p><p> reg[7:0] data_ram;</p><p> wire[7:0] data0,data1,data
122、2,data3;</p><p> rd_add rd(.clk(clk),.rst(rst),.rd_add(rd_add),.rden(rden));</p><p> choice mychoice(.clk(clk),.rst(rst),.flag(flag),.data_in(data_ram),.rdaddress(rd_add),.data0(data0),</p&
123、gt;<p> .data1(data1),.data2(data2),.data3(data3),.full(full),.rden(rden));</p><p> always #3 data_ram = data_ram + 1'b1;</p><p> always #3 clk = ~clk;</p><p> initia
124、l begin</p><p> #0 clk = 1'b0;</p><p> data_ram = 8'b0;</p><p> rst = 1'b0;</p><p> full = 4'b0;</p><p> rden = 1'b0;</p>&
125、lt;p> #15 rst = 1'b1;</p><p> #13 rden = 1'b1;</p><p> #150 full = 4'b1111;</p><p><b> end</b></p><p><b> endmodule</b></
126、p><p><b> 仿真結(jié)果:</b></p><p> 圖22 choice模塊仿真圖</p><p><b> 結(jié)果分析:</b></p><p> 有上圖得知。仿真結(jié)果和我們?cè)O(shè)計(jì)完全符合。</p><p> ram_double模塊仿真代碼:</p>
127、<p> module ram_double2_test;</p><p> reg clock; </p><p> reg [7:0] data;</p><p> reg [5:0] rdaddress;</p><p> reg [5:0] wraddress;</p>
128、;<p> reg wren;</p><p> wire [7:0] q; </p><p> ram_double2 R(.clock(clock), .data(data),.rdaddress(rdaddress), </p><p> .wraddress(wraddress), .wren(wren),.q(q));&
129、lt;/p><p> always #5 clock = ~clock; </p><p> initial begin</p><p> #0 clock = 1'b1;</p><p> wren = 1'b0;</p><p> rdaddress =
130、 6'd63;</p><p> wraddress = 6'd0;</p><p> data = 8'd5;</p><p> #10 data = 8'd4;</p><p> wren = 1'b1;</p><p> wraddress = 6'd1;
131、</p><p> #10 data = 8'd3;</p><p> wraddress = 6'd2; </p><p> rdaddress = 6'd1;</p><p> #10 rdaddress = 6'd2; </p><p><b> e
132、nd</b></p><p><b> endmodule</b></p><p><b> 仿真結(jié)果:</b></p><p> 圖23 ram_double模塊仿真圖</p><p><b> 結(jié)果分析:</b></p><p>
133、 有上圖得知。仿真結(jié)果和我們?cè)O(shè)計(jì)完全符合。</p><p> FIFO模塊仿真代碼:</p><p> module fifo123_test;</p><p><b> reg clk;</b></p><p><b> reg rst;</b></p><p>
134、 reg wrreq;</p><p> reg rdreq;</p><p> reg [7:0]data_in;</p><p> wire full;</p><p> wire empty;</p><p> wire [7:0]data_out;</p><p> fif
135、o123 fifo(.clk(clk),.rst(rst),.full(full),.empty(empty),.wrreq(wrreq),</p><p> .rdreq(rdreq),.data_in(data_in),.data_out(data_out));</p><p> always #5 clk<=~clk;</p><p> initi
136、al begin</p><p> #0 clk=1'b0;rst=1'b1;wrreq=1'b0;rdreq=1'b0;data_in=8'b0;</p><p> #5 rst=1'b0;</p><p> #10 rst=1'b1;wrreq=1'b1;</p><p&g
137、t; data_in=8'b10011011;</p><p> #10 data_in=8'b11111100;</p><p> #10 data_in=8'b01010010;</p><p> #10 data_in=8'b11100010;</p><p> #10 data_in=8
138、9;b00011100;</p><p> #10 data_in=8'b01101100;</p><p> #10 data_in=8'b10111110;</p><p> #10 data_in=8'b01111101;</p><p> #10 data_in=8'b11001000;<
139、/p><p> #10 rdreq=1'b1;</p><p> data_in=8'b00000011;</p><p> #20 wrreq=1'b0;</p><p> #80 rdreq=1'b0; </p><p><b> end</b&g
140、t;</p><p><b> endmodule</b></p><p><b> 仿真結(jié)果:</b></p><p> 圖24 FIFO模塊仿真圖</p><p><b> 結(jié)果分析:</b></p><p> 有上圖得知。仿真結(jié)果和我們?cè)O(shè)
141、計(jì)完全符合。</p><p> 8、compare模塊仿真代碼:</p><p> module compare_tset;</p><p> reg clk,flag;</p><p> reg rst;</p><p> reg [7:0] data_in0,data_in1,data_in2,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字集成電路課程實(shí)驗(yàn)報(bào)告
- 數(shù)字集成電路綜合設(shè)計(jì)
- 數(shù)字集成電路的設(shè)計(jì)形式
- 數(shù)字集成電路復(fù)習(xí)筆記
- 數(shù)字集成電路的設(shè)計(jì)流程
- 常用基本數(shù)字集成電路
- 中國(guó)數(shù)字集成電路行業(yè)調(diào)查分析與數(shù)字集成電路龍頭企業(yè)研究
- 數(shù)字集成電路驗(yàn)證方法學(xué)
- 數(shù)字集成電路設(shè)計(jì)與分析
- 數(shù)字集成電路設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文——數(shù)字集成電路
- 數(shù)字集成電路的結(jié)構(gòu)特點(diǎn)cmos電路
- 數(shù)字集成電路測(cè)試系統(tǒng)的開(kāi)發(fā).pdf
- 數(shù)字集成電路測(cè)試儀硬件的設(shè)計(jì)
- 數(shù)字集成電路低功耗優(yōu)化設(shè)計(jì)研究.pdf
- 數(shù)字集成電路測(cè)試技術(shù)研究.pdf
- 高速數(shù)字集成電路的邏輯優(yōu)化.pdf
- 數(shù)字集成電路自動(dòng)充消磁器設(shè)計(jì)
- 數(shù)字集成電路設(shè)計(jì)方法的研究.pdf
- 數(shù)字集成電路低功耗設(shè)計(jì)方法研究.pdf
評(píng)論
0/150
提交評(píng)論