verilog課程設(shè)計(jì)2_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  南通大學(xué)電子信息學(xué)院</p><p>  硬件描述語言課程設(shè)計(jì)</p><p><b>  論文</b></p><p>  課 題 8位ALU設(shè)計(jì) </p><p>  班 級__ __集092_______ </

2、p><p>  姓 名 邱小健 0911002184</p><p>  指導(dǎo)教師 郭興龍 </p><p>  日 期 2012.6.18 ~ 2012.6.29 </p><p><b>  目 錄</b></p><p>  1 設(shè)計(jì)概述

3、 ----------------------------------1 </p><p>  2 設(shè)計(jì)功能 ----------------------------------2</p><p>  3 設(shè)計(jì)方案 ----------------------------------3</p><p>  4 設(shè)計(jì)與仿真 -----------

4、---------------------11</p><p>  5 硬件驗(yàn)證 ----------------------------------13</p><p>  6 結(jié)束語 ------------------------------------18</p><p>  7 參考文獻(xiàn) ----------------------------

5、------18</p><p>  8 附錄 --------------------------------------19</p><p><b>  設(shè)計(jì)概述</b></p><p>  介紹了一種基于可編程邏輯器件FPGA和硬件描述語言的8位的ALU的設(shè)計(jì)方法。該ALU采取層次設(shè)計(jì)方法,有寄存器模塊,控制模塊和示模塊組成,能實(shí)現(xiàn)8

6、位無號(hào)數(shù)的取值,加減,和4中邏輯運(yùn)算,與,或,異或,同或。該ALU在QuartusII軟件環(huán)境下進(jìn)行了功能仿真,通過DE2驗(yàn)證表明,所設(shè)計(jì)的ALU完全正確,可供直接調(diào)用。</p><p><b>  1</b></p><p>  設(shè)計(jì)功能:8位ALU設(shè)計(jì)</p><p>  1)本設(shè)計(jì)要求該處理器的數(shù)據(jù)寬度是8bit,可以實(shí)現(xiàn)算術(shù)加法、算術(shù)減

7、法、邏輯與、邏輯或、邏輯非、邏輯與非、邏輯或非和邏輯異或等8</p><p><b>  種運(yùn)算。</b></p><p>  2)用選擇端[2:0] opcode選擇8種運(yùn)算,2個(gè)操作數(shù)分別是[7:0]a_r和[7:0]b_r,運(yùn)算結(jié)果是 [7:0]alu_out;</p><p>  并定義當(dāng)選擇端為000為取A的值、001為取B的值、01

8、0為算術(shù)加法、011為算術(shù)減法、100為邏輯與、101為邏輯或、110為邏輯異或、111為邏輯同或。</p><p>  3)使用DE-2板上的3個(gè)撥碼開關(guān)要來設(shè)置當(dāng)前ALU的運(yùn)算功能,再由8個(gè)撥碼開關(guān)給定數(shù)據(jù)A和數(shù)據(jù)B,由一個(gè)按鍵key手動(dòng)提供脈沖。</p><p><b>  2</b></p><p><b>  設(shè)計(jì)方案<

9、;/b></p><p><b>  設(shè)計(jì)說明 </b></p><p>  本設(shè)計(jì)共有5個(gè)模塊組成,包括:</p><p>  1)脈沖輸出器(key手動(dòng)脈沖),計(jì)數(shù)依次產(chǎn)生四個(gè)脈沖到各個(gè)部件;</p><p>  2)寄存器A,第一個(gè)脈沖來時(shí)鎖存數(shù)據(jù)A,并在數(shù)碼管上顯示;</p><p&

10、gt;  3)寄存器B,第二個(gè)脈沖來時(shí)鎖存數(shù)據(jù)B,并在數(shù)碼管上顯示;</p><p>  4)8位ALU,;第三個(gè)脈沖來時(shí)進(jìn)行運(yùn)算,并所存結(jié)果aluout;</p><p>  5)結(jié)果顯示器,將結(jié)果顯示在DE2板上的數(shù)碼管上。</p><p><b>  RTL視圖</b></p><p><b> ?。?)

11、頂層模塊</b></p><p>  module final_alu8(clk,clk_r,rst,a,b,alu_out,opcode,sw_ab,HEX1,HEX0,HEX7,HEX6,HEX5,HEX4);</p><p>  input clk,rst,clk_r;</p><p>  input [7:0]sw_ab;</p>

12、<p>  input [2:0]opcode;</p><p>  output [6:0]HEX1,HEX0,HEX7,HEX6,HEX5,HEX4;</p><p>  output [7:0]a;</p><p>  output [7:0]b;</p><p>  output [7:0]alu_out;</p>

13、;<p>  rega U1(.clk(clk),.rst(rst),.sw_ab(sw_ab),.a_r(a),.clk_r(clk_r),.HEX7(HEX7),.HEX6(HEX6));</p><p>  regb U2(.clk(clk),.rst(rst),.sw_ab(sw_ab),.b_r(b),.clk_r(clk_r),.HEX5(HEX5),.HEX4(HEX4));</

14、p><p>  alur U3(.clk(clk),.rst(rst),.a_r(a),.b_r(b),.alu_out(alu_out),.opcode(opcode));</p><p><b>  3</b></p><p>  digital U4(.clk_r(clk_r),.rst(rst),.alu_out(alu_out),.HEX

15、1(HEX1),.HEX0(HEX0));</p><p><b>  endmodule</b></p><p> ?。?)寄存A值顯示模塊</p><p>  module rega(clk,clk_r,rst,sw_ab,a_r,HEX7,HEX6);</p><p>  input [7:0]sw_ab;<

16、/p><p>  input clk,clk_r,rst;</p><p>  output[7:0]a_r;</p><p>  reg [7:0]a_r;</p><p>  output reg[6:0]HEX7,HEX6;</p><p>  reg [3:0] cnt;</p><p> 

17、 always @(posedge clk or negedge rst)</p><p>  if(!rst) cnt<=1'd0;</p><p>  else if(cnt==5) cnt<=1'd0;</p><p>  else cnt<=cnt+1'd1;</p><p>  always

18、 @(posedge clk or negedge rst)</p><p>  if(!rst) a_r=0;</p><p>  else if(cnt==1) a_r=sw_ab;</p><p>  else a_r=a_r;</p><p>  parameterseg0= 7'b1000000,</p>

19、<p>  seg1= 7'b1111001,</p><p>  seg2= 7'b0100100,</p><p>  seg3= 7'b0110000,</p><p>  seg4= 7'b0011001,</p><p>  seg5= 7'b0010010,</p&

20、gt;<p>  seg6= 7'b0000010,</p><p>  seg7= 7'b1111000,</p><p>  seg8= 7'b0000000,</p><p>  seg9= 7'b0010000,</p><p>  sega= 7'b0001000,&l

21、t;/p><p>  segb= 7'b0000011,</p><p>  segc= 7'b1000110,</p><p>  segd= 7'b0100001,</p><p>  sege= 7'b0000110,</p><p>  segf= 7'b00011

22、10;</p><p>  always @(posedge clk_r )</p><p>  case(a_r[3:0])</p><p>  4'h0: HEX6[6:0] = seg0;</p><p>  4'h1: HEX6[6:0] = seg1;</p><p>  4'h2:

23、HEX6[6:0] = seg2;</p><p>  4'h3: HEX6[6:0] = seg3;</p><p><b>  4</b></p><p>  4'h4: HEX6[6:0] = seg4;</p><p>  4'h5: HEX6[6:0] = seg5;</p>

24、<p>  4'h6: HEX6[6:0] = seg6;</p><p>  4'h7: HEX6[6:0] = seg7;</p><p>  4'h8: HEX6[6:0] = seg8;</p><p>  4'h9: HEX6[6:0] = seg9;</p><p>  4'h

25、a: HEX6[6:0] = sega;</p><p>  4'hb: HEX6[6:0] = segb;</p><p>  4'hc: HEX6[6:0] = segc;</p><p>  4'hd: HEX6[6:0] = segd;</p><p>  4'he: HEX6[6:0] = sege;

26、</p><p>  4'hf: HEX6[6:0] = segf;</p><p>  default:HEX6[6:0] = seg0;</p><p><b>  endcase</b></p><p>  always @(posedge clk_r)</p><p>  case

27、(a_r[7:4])</p><p>  4'h0: HEX7[6:0] = seg0;</p><p>  4'h1: HEX7[6:0] = seg1;</p><p>  4'h2: HEX7[6:0] = seg2;</p><p>  4'h3: HEX7[6:0] = seg3;</p>

28、<p>  4'h4: HEX7[6:0] = seg4;</p><p>  4'h5: HEX7[6:0] = seg5;</p><p>  4'h6: HEX7[6:0] = seg6;</p><p>  4'h7: HEX7[6:0] = seg7;</p><p>  4'h

29、8: HEX7[6:0] = seg8;</p><p>  4'h9: HEX7[6:0] = seg9;</p><p>  4'ha: HEX7[6:0] = sega;</p><p>  4'hb: HEX7[6:0] = segb;</p><p>  4'hc: HEX7[6:0] = segc;

30、</p><p>  4'hd: HEX7[6:0] = segd;</p><p>  4'he: HEX7[6:0] = sege;</p><p>  4'hf: HEX7[6:0] = segf;</p><p>  default:HEX7[6:0] = seg0;</p><p>&

31、lt;b>  endcase </b></p><p><b>  endmodule</b></p><p>  (3)寄存B值顯示模塊</p><p>  module regb(clk,rst,sw_ab,b_r,clk_r,HEX5,HEX4);</p><p>  input [7:0]sw_

32、ab;</p><p>  input clk,rst,clk_r;</p><p>  output[7:0]b_r;</p><p><b>  5</b></p><p>  reg [7:0]b_r;</p><p>  output reg[6:0]HEX5,HEX4;</p>

33、;<p>  reg [3:0] cnt;</p><p>  always @(posedge clk or negedge rst)</p><p>  if(!rst) cnt<=1'd0;</p><p>  else if(cnt==5) cnt<=1'd0;</p><p>  else

34、cnt<=cnt+1'd1;</p><p>  always @(posedge clk or negedge rst)</p><p>  if(!rst) b_r=0;</p><p>  else if(cnt==2) b_r=sw_ab;</p><p>  else b_r=b_r;</p><p

35、>  parameterseg0= 7'b1000000,</p><p>  seg1= 7'b1111001,</p><p>  seg2= 7'b0100100,</p><p>  seg3= 7'b0110000,</p><p>  seg4= 7'b0011001,&l

36、t;/p><p>  seg5= 7'b0010010,</p><p>  seg6= 7'b0000010,</p><p>  seg7= 7'b1111000,</p><p>  seg8= 7'b0000000,</p><p>  seg9= 7'b00100

37、00,</p><p>  sega= 7'b0001000,</p><p>  segb= 7'b0000011,</p><p>  segc= 7'b1000110,</p><p>  segd= 7'b0100001,</p><p>  sege= 7'b

38、0000110,</p><p>  segf= 7'b0001110;</p><p>  always @(posedge clk_r )</p><p>  case(b_r[3:0])</p><p>  4'h0: HEX4[6:0] = seg0;</p><p>  4'h1:

39、HEX4[6:0] = seg1;</p><p>  4'h2: HEX4[6:0] = seg2;</p><p>  4'h3: HEX4[6:0] = seg3;</p><p>  4'h4: HEX4[6:0] = seg4;</p><p>  4'h5: HEX4[6:0] = seg5;<

40、;/p><p>  4'h6: HEX4[6:0] = seg6;</p><p>  4'h7: HEX4[6:0] = seg7;</p><p>  4'h8: HEX4[6:0] = seg8;</p><p>  4'h9: HEX4[6:0] = seg9;</p><p>  

41、4'ha: HEX4[6:0] = sega;</p><p>  4'hb: HEX4[6:0] = segb;</p><p><b>  6</b></p><p>  4'hc: HEX4[6:0] = segc;</p><p>  4'hd: HEX4[6:0] = segd;

42、</p><p>  4'he: HEX4[6:0] = sege;</p><p>  4'hf: HEX4[6:0] = segf;</p><p>  default:HEX4[6:0] = seg0;</p><p><b>  endcase</b></p><p>  

43、always @(posedge clk_r)</p><p>  case(b_r[7:4])</p><p>  4'h0: HEX5[6:0] = seg0;</p><p>  4'h1: HEX5[6:0] = seg1;</p><p>  4'h2: HEX5[6:0] = seg2;</p>

44、<p>  4'h3: HEX5[6:0] = seg3;</p><p>  4'h4: HEX5[6:0] = seg4;</p><p>  4'h5: HEX5[6:0] = seg5;</p><p>  4'h6: HEX5[6:0] = seg6;</p><p>  4'h

45、7: HEX5[6:0] = seg7;</p><p>  4'h8: HEX5[6:0] = seg8;</p><p>  4'h9: HEX5[6:0] = seg9;</p><p>  4'ha: HEX5[6:0] = sega;</p><p>  4'hb: HEX5[6:0] = segb;

46、</p><p>  4'hc: HEX5[6:0] = segc;</p><p>  4'hd: HEX5[6:0] = segd;</p><p>  4'he: HEX5[6:0] = sege;</p><p>  4'hf: HEX5[6:0] = segf;</p><p>

47、;  default:HEX5[6:0] = seg0;</p><p><b>  endcase </b></p><p><b>  endmodule</b></p><p> ?。?)ALU運(yùn)算模塊</p><p>  module alur(clk,rst,alu_out,a_r,b_r

48、,opcode,zero);</p><p>  output [7:0]alu_out;</p><p>  output zero;</p><p>  input [7:0]a_r,b_r;</p><p>  input [2:0] opcode;</p><p>  input clk,rst;</p&

49、gt;<p>  reg [7:0] alu_out;</p><p>  reg [3:0] cnt;</p><p>  parameter quA=3'b000,</p><p>  quB=3'b001,</p><p>  ADD=3'b010,</p><p>  D

50、EC=3'b011,</p><p>  ANDD=3'b100,</p><p><b>  7</b></p><p>  XORR=3'b101,</p><p>  XOR=3'b110,</p><p>  NXOR=3'b111;</p&g

51、t;<p>  assign zero=!a_r;</p><p>  always @(posedge clk or negedge rst)</p><p>  if(!rst) cnt<=1'd0;</p><p>  else if(cnt==5) cnt<=1'd0;</p><p>  e

52、lse cnt<=cnt+1'd1;</p><p>  always @(posedge clk or negedge rst)</p><p>  if(!rst) alu_out=0;</p><p>  else if(cnt==3) begin</p><p>  casex(opcode)</p>&l

53、t;p>  quA:alu_out<=a_r;</p><p>  quB:alu_out<=b_r;</p><p>  ADD:alu_out<=a_r+b_r;</p><p>  DEC:alu_out<=a_r-b_r;</p><p>  ANDD:alu_out<=a_r&b_r;&l

54、t;/p><p>  XORR:alu_out<=a_r|b_r;</p><p>  XOR:alu_out<=a_r^b_r;</p><p>  NXOR:alu_out<=a_r^~b_r;</p><p>  default:alu_out<=8'bxxxx_xxxx;</p><p&

55、gt;<b>  endcase</b></p><p><b>  end</b></p><p>  else alu_out=0;</p><p><b>  endmodule</b></p><p><b> ?。?)輸出顯示模塊</b><

56、/p><p>  module digital(clk_r,rst,alu_out,HEX1,HEX0);</p><p>  input [7:0]alu_out;</p><p>  input clk_r,rst;</p><p>  output reg[6:0]HEX1,HEX0;</p><p>  para

57、meterseg0= 7'b1000000,</p><p>  seg1= 7'b1111001,</p><p>  seg2= 7'b0100100,</p><p>  seg3= 7'b0110000,</p><p>  seg4= 7'b0011001,</p>

58、<p>  seg5= 7'b0010010,</p><p>  seg6= 7'b0000010,</p><p><b>  8</b></p><p>  seg7= 7'b1111000,</p><p>  seg8= 7'b0000000,</p>

59、;<p>  seg9= 7'b0010000,</p><p>  sega= 7'b0001000,</p><p>  segb= 7'b0000011,</p><p>  segc= 7'b1000110,</p><p>  segd= 7'b0100001,<

60、/p><p>  sege= 7'b0000110,</p><p>  segf= 7'b0001110;</p><p>  always @(posedge clk_r )</p><p>  case(alu_out[3:0])</p><p>  4'h0: HEX0[6:0] = s

61、eg0;</p><p>  4'h1: HEX0[6:0] = seg1;</p><p>  4'h2: HEX0[6:0] = seg2;</p><p>  4'h3: HEX0[6:0] = seg3;</p><p>  4'h4: HEX0[6:0] = seg4;</p><

62、p>  4'h5: HEX0[6:0] = seg5;</p><p>  4'h6: HEX0[6:0] = seg6;</p><p>  4'h7: HEX0[6:0] = seg7;</p><p>  4'h8: HEX0[6:0] = seg8;</p><p>  4'h9: HEX

63、0[6:0] = seg9;</p><p>  4'ha: HEX0[6:0] = sega;</p><p>  4'hb: HEX0[6:0] = segb;</p><p>  4'hc: HEX0[6:0] = segc;</p><p>  4'hd: HEX0[6:0] = segd;</p

64、><p>  4'he: HEX0[6:0] = sege;</p><p>  4'hf: HEX0[6:0] = segf;</p><p>  default:HEX0[6:0] = seg0;</p><p><b>  endcase</b></p><p>  always

65、 @(posedge clk_r)</p><p>  case(alu_out[7:4])</p><p>  4'h0: HEX1[6:0] = seg0;</p><p>  4'h1: HEX1[6:0] = seg1;</p><p>  4'h2: HEX1[6:0] = seg2;</p>

66、<p>  4'h3: HEX1[6:0] = seg3;</p><p>  4'h4: HEX1[6:0] = seg4;</p><p>  4'h5: HEX1[6:0] = seg5;</p><p>  4'h6: HEX1[6:0] = seg6;</p><p>  4'h7:

67、 HEX1[6:0] = seg7;</p><p>  4'h8: HEX1[6:0] = seg8;</p><p>  4'h9: HEX1[6:0] = seg9;</p><p><b>  9</b></p><p>  4'ha: HEX1[6:0] = sega;</p>

68、;<p>  4'hb: HEX1[6:0] = segb;</p><p>  4'hc: HEX1[6:0] = segc;</p><p>  4'hd: HEX1[6:0] = segd;</p><p>  4'he: HEX1[6:0] = sege;</p><p>  4'

69、hf: HEX1[6:0] = segf;</p><p>  default:HEX1[6:0] = seg0;</p><p><b>  endcase </b></p><p><b>  endmodule</b></p><p><b>  10</b></p

70、><p><b>  設(shè)計(jì)與仿真</b></p><p>  注:仿真數(shù)字顯示均采用16進(jìn)制</p><p>  取A值(控制信號(hào)【2:0】opcode=000)</p><p>  取B值(控制信號(hào)【2:0】opcode=001)</p><p>  加法運(yùn)算(控制信號(hào)【2:0】opcode=010

71、)</p><p><b>  11</b></p><p>  減法運(yùn)算(控制信號(hào)【2:0】opcode=011)</p><p>  (5)與邏輯運(yùn)算(控制信號(hào)【2:0】opcode=100)</p><p>  或邏輯運(yùn)算(控制信號(hào)【2:0】opcode=101)</p><p> ?。?)

72、異或邏輯運(yùn)算(控制信號(hào)【2:0】opcode=110)</p><p> ?。?)同或邏輯運(yùn)算(控制信號(hào)【2:0】opcode=111)</p><p><b>  12</b></p><p><b>  硬件驗(yàn)證</b></p><p><b>  初始狀態(tài)</b><

73、/p><p>  (2)取A值(控制信號(hào)【2:0】opcode=000)</p><p><b>  13</b></p><p>  取B值(控制信號(hào)【2:0】opcode=001)</p><p>  加法運(yùn)算(控制信號(hào)【2:0】opcode=010)</p><p><b>  14&

74、lt;/b></p><p>  減法運(yùn)算(控制信號(hào)【2:0】opcode=011)</p><p> ?。?)與邏輯運(yùn)算(控制信號(hào)【2:0】opcode=100)</p><p><b>  15</b></p><p> ?。?)或邏輯運(yùn)算(控制信號(hào)【2:0】opcode=101)</p><

75、;p> ?。?)異或邏輯運(yùn)算(控制信號(hào)【2:0】opcode=110)</p><p><b>  16</b></p><p> ?。?)同或邏輯運(yùn)算(控制信號(hào)【2:0】opcode=111)</p><p><b>  17</b></p><p><b>  結(jié)束語</b

76、></p><p>  兩個(gè)多星期的課程設(shè)計(jì)是辛苦的,是充滿智慧的汗水的。我選到的課題是8位ALU設(shè)計(jì),剛開始的時(shí)候,是一頭霧水,無從下手,然后翻閱書籍和上網(wǎng)了解,才漸漸明白ALU是個(gè)什么,然后構(gòu)建框圖,設(shè)計(jì)模塊,最終歷時(shí)一個(gè)星期完成設(shè)計(jì),完成之初,開心之余也發(fā)現(xiàn)了不足和需要改進(jìn)的地方,比如A,B值不能直接顯示,需要自己記憶,還有進(jìn)位,輸出值超過0xff無法顯示的,運(yùn)算能力較少只有加減與或的問題。然后又進(jìn)過

77、幾天的改進(jìn),最終,可以數(shù)碼管顯示A,B值,和最終運(yùn)算結(jié)果的值,可以講輸出改成9位,即可解決溢出的問題,然后加上了與或,同或的計(jì)算能力,我覺得可以賦予更多的邏輯計(jì)算能力,或非,與非等等。</p><p>  通過這次課程設(shè)計(jì),學(xué)到了很多,對于VerilogHDL的更加掌握,和層次化設(shè)計(jì)的運(yùn)用,也得到一定的提高。</p><p><b>  參考文獻(xiàn)</b></p&

78、gt;<p>  期刊文獻(xiàn)格式:[序號(hào)]作者.文目[J].期刊名,年,卷號(hào)(期數(shù)):起止頁碼</p><p>  圖書文獻(xiàn)格式:[序號(hào)]作者.書名[M].出版地:出版者,年份,起止頁碼</p><p>  夏宇聞。Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程【M】,北京:北京航空航天大學(xué)出版社,2003.</p><p><b>  18</b>

溫馨提示

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

評論

0/150

提交評論