序列信號檢測eda課程設計_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計</b></p><p>  學生姓名: *** 學號:*****</p><p>  專業(yè)班級: 自動化 工作單位:電氣工程與自動化系</p><p>  指導教師: </p><p>  題 目:

2、 序列信號檢測器 </p><p><b>  目錄</b></p><p><b>  摘要</b></p><p><b>  緒論</b></p><p><b>  設計內(nèi)容</b></p><p><

3、;b>  一、設計目的</b></p><p><b>  二、設計內(nèi)容</b></p><p><b>  三、設計原理</b></p><p><b>  四、實驗步驟</b></p><p><b>  五、實驗程序</b><

4、/p><p><b>  心得體會</b></p><p><b>  參考文獻</b></p><p><b>  摘要</b></p><p>  序列檢測器多用于通信系統(tǒng)中對禁用碼的檢測,或者是對所需信號的提取,即一旦檢測到所需信號就輸出高電平,這在數(shù)字通信領域有廣泛的應運。

5、本文介紹了一種采用單片F(xiàn)PGA 芯片進行脈沖序列檢測器的設計方法,主要闡述如何使用新興的EDA 器件取代傳統(tǒng) 的電子設計方法,利用FPGA的可編程性[7],簡潔而又多變的設計方法,縮短了研發(fā)周期, 同時使設計的電路體積更小功能更強大。本次課程設計設計出能夠檢測序列“1110101101” 的序列檢測器,并以此來描述序列檢測器的設計過程和基于FPGA 的軟件仿真。最后通過 QuartusII 的波形輸出對設計方案進行檢測,在硬件調(diào)試經(jīng)檢測

6、輸出正確設計符合要求。 </p><p>  關鍵詞:VHDL 序列檢測 Quartus Ⅱ FPGA </p><p><b>  Abstract</b></p><p>  Sequence detector system used for communication on the detection code disabled,

7、or is the extraction of the desired signal, that is, once detected, the required high output signal, which in the broad field of digital communications to be transported. This paper presents a single FPGA </p><

8、;p>  chip with the detector pulse equence design method, mainly on how to use new device to replace the traditional EDA electronic design, the use of FPGA's programmability[7], concise and changing the design meth

9、od shortens the development cycle, while allowing smaller circuit design and more powerful. The curriculum is designed to detect sequence "1110101101" sequence detectors, and detector in order to describe the s

10、equence of the design process and FPGA-based software simulation. Finally, the out</p><p>  Keywords: VHDL Sequence detection Quartus Ⅱ FPGA</p><p><b>  緒論</b></p><p>

11、;  隨著世界經(jīng)濟的不斷發(fā)展,電子技術日新月異,一日千里。隨著第一支晶體三極管于1947年問世,開創(chuàng)了電子技術的新領域,隨后60年代初,模擬和數(shù)字集成電路相繼上市,到七十年代末,微處理器的問世,電子器件的應用出現(xiàn)了新的局面。隨著微電子技術的發(fā)展,將會有更多的的電子產(chǎn)品陸續(xù)問世。微電子技術的進步主要表現(xiàn)在大規(guī)模集成電路加工技術即半導體工藝技術的發(fā)展上,現(xiàn)代電子設計技術的核心日趨轉向基于計算機的電子設計自動化技術,即EDA技術。 </

12、p><p>  電子設計自動化即EDA技術是指包括電路設計、系統(tǒng)仿真、設計綜合、PCB版圖設計和制版的一套自動化流程。依賴功能強大的計算機,在EDA工具軟件平臺上,對以硬件描述語言HDL為系統(tǒng)邏輯描述手段完成的設計文件,自動完成邏輯編譯、化簡、分割、綜合、布局布線以及邏輯優(yōu)化和仿真調(diào)試,直至實現(xiàn)既定的電子線路系統(tǒng)功能。EDA代表了當今電子設計技術的最新發(fā)展方向,系統(tǒng)的關鍵電路用一片或幾片專用集成電路(ASIC)實現(xiàn),

13、然后采用硬件描述語言(VHDL)完成系統(tǒng)行為級設計[3],最后通過綜合器和適配器生成最終的目標器件。</p><p>  EDA技術主要包括大規(guī)??删幊踢壿?、硬件描述語言、軟件開發(fā)工具等內(nèi)容。目前,使用最為廣泛的大規(guī)??删幊踢壿婥PLD、FPGA屬高密度可編程邏輯器件[7],已成為現(xiàn)代高層次電子設計方法的實現(xiàn)載體。硬件描述語言HDL是EDA技術的重要組成部分,而VHDL在現(xiàn)在EDA設計中使用最多,是一種全方位的硬

14、件描述語言,包括系統(tǒng)行為級、寄存器傳輸級和邏輯門級多個設計層次, VHDL幾乎覆蓋了以往各種硬件描述語言的功能,VHDL的設計不依賴于特定的器件,方便了工藝的轉換,具有良好的適應性,是設計者可以專心于其功能的實現(xiàn),不需要對不影響功能的與工藝有關的因素花費過多的時間與精力。</p><p><b>  設計內(nèi)容</b></p><p><b>  一、設計目的

15、</b></p><p>  掌握利用有限狀態(tài)機實現(xiàn)一般時序邏輯分析的方法,了解一般狀態(tài)機的設計與應用。</p><p><b>  二、設計內(nèi)容</b></p><p>  設計一序列檢測器并在SmartSOPC實驗箱上進行硬件測試。利用Quartus ||軟件進行設計、仿真驗證,最后進行引腳鎖定并完成硬件測試。用KEY5控制復位

16、,KEY6控制狀態(tài)機的時鐘,KEY1~KEY4控制輸入待檢預置數(shù)和檢測預置數(shù)(檢測密碼),并在數(shù)碼管1\2和4\5上顯示。</p><p><b>  三、設計原理</b></p><p>  (1)序列檢測器可用于檢測由二進制碼組成的脈沖序列信號。當序列檢測器連續(xù)收到一組串行二進制碼后,如果這組序列碼與檢測器中預先設置的序列碼相同,則輸出1,否則輸出0.這種檢測的關

17、鍵是必須收到連續(xù)的正確碼,所以要求檢測器必須對前一次接受到的序列碼做記憶分析,直到在連續(xù)檢測中所收到的每一位二進制碼都與預置序列碼對應相同。在檢測過程中,只要有一位不相等都將回到初始狀態(tài)重新開始檢測。不考慮重疊的可能。</p><p>  (2)為了配合硬件測試,本實驗提供了一個測試模塊(schk_test),該模塊主要產(chǎn)生序列檢測器所需的時鐘、復位、串行輸入序列碼及預置數(shù)等信號。</p><

18、p>  對莫模塊的各端口說明如下:</p><p>  Clock系統(tǒng)時鐘輸入(48MHz)</p><p>  key[5..0] 按鍵輸入</p><p>  disp[3..0] 序列檢測器檢測結果輸入(顯示于數(shù)碼管8)</p><p>  sda 串行序列碼輸出</p>

19、<p>  clkout序列檢測器狀態(tài)機時鐘輸出</p><p>  rstout 序列檢測器復位信號輸出</p><p>  dat[7..0] 檢測預置數(shù)輸出</p><p>  led7..0] LED輸出</p><p>  seg[7..0] 數(shù)碼管段輸出&l

20、t;/p><p>  dig[7..0] 數(shù)碼管位輸出</p><p><b>  四、實驗步驟</b></p><p> ?。?)啟動Quartus||建立一個空白工程,然后命名為schk_top.qpf。</p><p> ?。?)新建VerilogHDL源程序文件schk_v,輸入程序代碼并保存,進行綜合編

21、譯。若在編譯過程中發(fā)現(xiàn)錯誤,則找出并更正錯誤,直至編譯成功為止。</p><p> ?。?)將光盤中的EDA_Component目錄下的schk_test.bsf,schk_test.v拷貝到工程目錄。(原理圖形式需此步驟)</p><p>  (4)新建圖形設計文件命名為schk_top.bdf并保存,其模塊原理圖:</p><p><b>  原理圖:

22、</b></p><p><b>  仿真圖:</b></p><p>  (5)選擇目標器件并對相應的引腳進行定義鎖定,在這里所選擇的器件為EPIC6Q240C8芯片,將未使用的引腳設置為三態(tài)輸入。</p><p> ?。?)將schk_top.bdf設置為頂層實體,對該工程進行全程編譯處理,若在編譯過程中發(fā)現(xiàn)錯誤,則找出錯誤并更

23、正錯誤,直至編譯成功為止。</p><p> ?。?)硬件連接、下載程序。</p><p><b>  五、實驗程序</b></p><p> ?。ㄒ唬┰韴D形式的實驗參考程序如下:</p><p><b>  模塊1為:</b></p><p>  moduleschk(

24、sda,clk,rst,dat,disp);//序列檢測器模塊</p><p>  inputsda;//串行序列碼輸入</p><p>  inputclk;//時鐘信號輸入</p><p>  inputrst;//復位信號輸入</p><p>  input[7:0]dat;//輸入

25、待檢測預置數(shù)</p><p>  output[3:0]disp;//檢測結果輸出</p><p>  reg[3:0]disp_r;//檢測結果輸出寄存器</p><p>  reg[3:0]state;//狀態(tài)機寄存器</p><p>  parameters0=4'd0,s1=4'd

26、1,//狀態(tài)機參數(shù)</p><p>  s2=4'd2,s3=4'd3,</p><p>  s4=4'd4,s5=4'd5,</p><p>  s6=4'd6,s7=4'd7,</p><p><b>  s8=4'd8;</b></p>&l

27、t;p>  assigndisp=disp_r;//輸出檢測結果</p><p>  always@(posedge clk or negedge rst)</p><p><b>  begin</b></p><p><b>  if(~rst)</b></p><p>  

28、state<=s0;//復位</p><p><b>  else</b></p><p><b>  begin</b></p><p>  case(state)</p><p>  s0:if(sda==dat[7])state<=s1;else state<=s0;

29、//狀態(tài)s0</p><p>  s1:if(sda==dat[6])state<=s2;else state<=s0;//狀態(tài)s1</p><p>  s2:if(sda==dat[5])state<=s3;else state<=s0;//狀態(tài)s2</p><p>  s3:if(sda==dat[4])state<=s4

30、;else state<=s0;//狀態(tài)s3</p><p>  s4:if(sda==dat[3])state<=s5;else state<=s0;//狀態(tài)s4</p><p>  s5:if(sda==dat[2])state<=s6;else state<=s0;//狀態(tài)s5</p><p>  s6:if(sda=

31、=dat[1])state<=s7;else state<=s0;//狀態(tài)s6</p><p>  s7:if(sda==dat[0])state<=s8;else state<=s0;//狀態(tài)s7</p><p>  default:state<=s0;</p><p><b>  endcase</b>

32、</p><p><b>  end</b></p><p><b>  end</b></p><p>  always @(state)</p><p><b>  begin</b></p><p>  if(state==s8)</p>

33、;<p>  disp_r<=4'hf;//序列碼檢測正確,輸出“F”</p><p><b>  else</b></p><p>  disp_r<=4'h0;//序列碼檢測錯誤,輸出“0”</p><p><b>  end</b></p><

34、p><b>  endmodule</b></p><p><b>  模塊2為:</b></p><p>  module schk_test(clock,key,sda,clkout,rstout,dat,disp,led,seg,dig); </p><p><b>  //外接I/O口 </b

35、></p><p>  input clock;//系統(tǒng)時鐘 </p><p>  input[5:0]key;//按鍵輸入 </p><p>  output[7:0]led;//輸出接LED </p><p>  output[7:0]seg;//輸出接數(shù)碼管段碼

36、</p><p>  output[7:0]dig;//輸出接數(shù)碼管位碼 </p><p>  //序列碼檢測模塊I/O口 </p><p>  output sda;//串行序列碼輸出 </p><p>  output clkout;//產(chǎn)生時鐘信號輸出 </p><p>

37、;  output rstout;//產(chǎn)生復位信號輸出 </p><p>  output[7:0]dat;//8位預置數(shù)輸出 </p><p>  input[3:0]disp;//輸入檢測結果 </p><p>  reg[7:0]dat_r;//輸出寄存器 </p><p>  r

38、eg[7:0]led_r; </p><p>  reg[7:0]seg_r; </p><p>  reg[7:0]dig_r; </p><p>  reg[16:0]count;//時鐘分頻計數(shù)器 </p><p>  reg[7:0]data;//內(nèi)部寄存器 </p>&

39、lt;p>  reg[8:0]data_shift; </p><p>  reg[5:0]dout1,dout2,dout3,buff;//消抖寄存器 </p><p>  reg[2:0]cnt3; //數(shù)碼管掃描計數(shù)器 </p><p>  reg[3:0]disp_dat; //數(shù)碼管掃描顯存 </p&

40、gt;<p>  reg div_clk;//分頻時鐘,用于消抖和掃描 </p><p>  wire[5:0]key_edge;//按鍵消抖輸出 </p><p>  assign dat = dat_r; </p><p>  assign led = ~led_r; </p><p>  assi

41、gn seg = seg_r; </p><p>  assign dig = dig_r; </p><p><b>  //時鐘分頻部分 </b></p><p>  always @(posedge clock) </p><p><b>  begin </b></p><

42、;p>  if (count < 17'd120000) </p><p><b>  begin </b></p><p>  count <= count + 1'b1; </p><p>  div_clk <= 1'b0; </p><p><b>  e

43、nd </b></p><p><b>  else </b></p><p><b>  begin </b></p><p>  count <= 17'd0; </p><p>  div_clk <= 1'b1; </p><p&g

44、t;<b>  end </b></p><p><b>  end </b></p><p><b>  //按鍵消抖部分 </b></p><p>  always @(posedge clock) </p><p><b>  begin </b>&

45、lt;/p><p>  if(div_clk) </p><p><b>  begin </b></p><p>  dout1 <= key; </p><p>  dout2 <= dout1; </p><p>  dout3 <= dout2; </p>&l

46、t;p><b>  end </b></p><p><b>  end </b></p><p>  //按鍵邊沿檢測部分 </p><p>  always @(posedge clock) </p><p><b>  begin </b></p>

47、<p>  buff <= dout1 | dout2 | dout3; </p><p><b>  end </b></p><p>  assign key_edge = ~(dout1 | dout2 | dout3) & buff; </p><p>  //按鍵控制處理部分 </p>&l

48、t;p>  always @(posedge clock)//按鍵1 序列碼高4位 </p><p><b>  begin </b></p><p>  if(key_edge[0])//下降沿檢測 </p><p>  data[7:4] <= data[7:4] + 1'b1; </

49、p><p><b>  end </b></p><p>  always @(posedge clock)//按鍵2 序列碼低4位 </p><p><b>  begin </b></p><p>  if(key_edge[1])//下降沿檢測 </p>

50、<p>  data[3:0] <= data[3:0] + 1'b1; </p><p><b>  end </b></p><p>  always @(posedge clock)//按鍵3 預置數(shù)高4位 </p><p><b>  begin </b></p>

51、<p>  if(key_edge[2])//下降沿檢測 </p><p>  dat_r[7:4] <= dat_r[7:4] + 1'b1; </p><p><b>  end </b></p><p>  always @(posedge clock)//按鍵4 預置數(shù)低4位 &

52、lt;/p><p><b>  begin </b></p><p>  if(key_edge[3])//下降沿檢測 </p><p>  dat_r[3:0] <= dat_r[3:0] + 1'b1; </p><p><b>  end </b></p>

53、<p>  assign rstout = buff[4];//按鍵5 復位 </p><p>  assign clkout = buff[5];//按鍵6 時鐘 </p><p>  always @(posedge clock) </p><p><b>  begin </b></p>

54、<p>  if(key_edge[4])//按鍵5 復位 </p><p><b>  begin </b></p><p>  data_shift = {1'b0,data};//重新裝載數(shù)據(jù) </p><p>  led_r = 8'd0; </p><p>&

55、lt;b>  end </b></p><p>  else if(key_edge[5])//按鍵6 </p><p><b>  begin </b></p><p>  data_shift = data_shift << 1; </p><p>  led_r =

56、 {data_shift[8],led_r[7:1]};//LED左移顯示 </p><p><b>  end </b></p><p><b>  end </b></p><p>  assign sda = data_shift[8];//串行序列碼輸出 </p><p> 

57、 //數(shù)碼管掃描顯示部分 </p><p>  always @(posedge clock) //定義上升沿觸發(fā)進程 </p><p><b>  begin </b></p><p>  if(div_clk) </p><p>  cnt3 <= cnt3 + 1'b1; </p&g

58、t;<p><b>  end </b></p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  if(div_clk) </p><p><b>  begin </

59、b></p><p>  case(cnt3)//選擇掃描顯示數(shù)據(jù) </p><p>  3'd0:disp_dat = data[7:4];//第一個數(shù)碼管 </p><p>  3'd1:disp_dat = data[3:0];//第二個數(shù)碼管 </p><p>  3'd3:disp

60、_dat = dat[7:4];//第四個數(shù)碼管 </p><p>  3'd4:disp_dat = dat[3:0];//第五個數(shù)碼管 </p><p>  3'd7:disp_dat = disp;//第八個數(shù)碼管 </p><p>  default:disp_dat = 4'h0; </p><p&

61、gt;<b>  endcase </b></p><p>  case(cnt3)//選擇數(shù)碼管顯示位 </p><p>  3'd0:dig_r = 8'b01111111;//選擇第一個數(shù)碼管顯示 </p><p>  3'd1:dig_r = 8'b10111111;//選擇第二個數(shù)

62、碼管顯示 </p><p>  3'd3:dig_r = 8'b11101111;//選擇第四個數(shù)碼管顯示 </p><p>  3'd4:dig_r = 8'b11110111;//選擇第五個數(shù)碼管顯示 </p><p>  3'd7:dig_r = 8'b11111110;//選擇第八個數(shù)碼管顯示 &l

63、t;/p><p>  default:dig_r = 8'b11111111; </p><p><b>  endcase </b></p><p><b>  end </b></p><p><b>  end </b></p><p> 

64、 always @(disp_dat) </p><p><b>  begin </b></p><p>  case(disp_dat)//七段譯碼 </p><p>  4'h0:seg_r = 8'hc0;//顯示0 </p><p>  4'h1:seg_r = 8&

65、#39;hf9;//顯示1 </p><p>  4'h2:seg_r = 8'ha4;//顯示2 </p><p>  4'h3:seg_r = 8'hb0;//顯示3 </p><p>  4'h4:seg_r = 8'h99;//顯示4 </p><p> 

66、 4'h5:seg_r = 8'h92;//顯示5 </p><p>  4'h6:seg_r = 8'h82;//顯示6 </p><p>  4'h7:seg_r = 8'hf8;//顯示7 </p><p>  4'h8:seg_r = 8'h80;//顯示8 &l

67、t;/p><p>  4'h9:seg_r = 8'h90;//顯示9 </p><p>  4'ha:seg_r = 8'h88;//顯示a </p><p>  4'hb:seg_r = 8'h83;//顯示b </p><p>  4'hc:seg_r = 8&

68、#39;hc6;//顯示c </p><p>  4'hd:seg_r = 8'ha1;//顯示d </p><p>  4'he:seg_r = 8'h86;//顯示e </p><p>  4'hf:seg_r = 8'h8e;//顯示f </p><p>&

69、lt;b>  endcase </b></p><p><b>  end </b></p><p><b>  endmodule</b></p><p> ?。ǘ┯贸绦蛐问阶龅某绦蛉缦?</p><p>  module schk(clock,key,sda,clkout,d

70、at,disp,led,seg,dig); </p><p><b>  //外接I/O口 </b></p><p>  input clock;//系統(tǒng)時鐘 </p><p>  input[5:0]key;//按鍵輸入 </p><p>  //inputsda;/

71、/串行序列碼輸入</p><p>  wirerst;//復位信號輸入</p><p>  //input[3:0]disp;//輸入檢測結果 </p><p>  //input[7:0]dat;//輸入待檢測預置數(shù)</p><p>  output[7:0]led;//輸出接LED &l

72、t;/p><p>  output[7:0]seg;//輸出接數(shù)碼管段碼 </p><p>  output[7:0]dig;//輸出接數(shù)碼管位碼 </p><p>  output sda;//串行序列碼輸出 </p><p>  output clkout;//產(chǎn)生時鐘信號輸出 <

73、;/p><p>  output[7:0]dat;//8位預置數(shù)輸出 </p><p>  output[3:0]disp;//檢測結果輸出</p><p>  reg[7:0]dat_r;//輸出寄存器 </p><p>  reg[7:0]led_r; </p><p&

74、gt;  reg[7:0]seg_r; </p><p>  reg[7:0]dig_r; </p><p>  reg[16:0]count;//時鐘分頻計數(shù)器 </p><p>  reg[7:0]data;//內(nèi)部寄存器 </p><p>  reg[8:0]data_shift; </p&g

75、t;<p>  reg[5:0]dout1,dout2,dout3,buff;//消抖寄存器 </p><p>  reg[2:0]cnt3; //數(shù)碼管掃描計數(shù)器 </p><p>  reg[3:0]disp_dat; //數(shù)碼管掃描顯存 </p><p>  reg div_clk;//分

76、頻時鐘,用于消抖和掃描 </p><p>  reg[3:0]disp_r;//檢測結果輸出寄存器</p><p>  reg[3:0]state;//狀態(tài)機寄存器</p><p>  wire[5:0]key_edge;//按鍵消抖輸出 </p><p>  assign dat = dat_r; <

77、;/p><p>  assign led = ~led_r; </p><p>  assign seg = seg_r; </p><p>  assign dig = dig_r; </p><p>  parameters0=4'd0,s1=4'd1,//狀態(tài)機參數(shù)</p><p>  s2=4

78、'd2,s3=4'd3,</p><p>  s4=4'd4,s5=4'd5,</p><p>  s6=4'd6,s7=4'd7,</p><p><b>  s8=4'd8;</b></p><p>  assigndisp=disp_r;//輸出檢測

79、結果</p><p><b>  //時鐘分頻部分 </b></p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  if (count < 17'd120000) </p><p&

80、gt;<b>  begin </b></p><p>  count <= count + 1'b1; </p><p>  div_clk <= 1'b0; </p><p><b>  end </b></p><p><b>  else </b&

81、gt;</p><p><b>  begin </b></p><p>  count <= 17'd0; </p><p>  div_clk <= 1'b1; </p><p><b>  end </b></p><p><b>

82、  end </b></p><p><b>  //按鍵消抖部分 </b></p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  if(div_clk) </p><p>&l

83、t;b>  begin </b></p><p>  dout1 <= key; </p><p>  dout2 <= dout1; </p><p>  dout3 <= dout2; </p><p><b>  end </b></p><p><

84、;b>  end </b></p><p>  //按鍵邊沿檢測部分 </p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  buff <= dout1 | dout2 | dout3; </p>

85、<p><b>  end </b></p><p>  assign key_edge = ~(dout1 | dout2 | dout3) & buff; </p><p>  //按鍵控制處理部分 </p><p>  always @(posedge clock)//按鍵1 序列碼高4位 </

86、p><p><b>  begin </b></p><p>  if(key_edge[0])//下降沿檢測 </p><p>  data[7:4] <= data[7:4] + 1'b1; </p><p><b>  end </b></p><

87、p>  always @(posedge clock)//按鍵2 序列碼低4位 </p><p><b>  begin </b></p><p>  if(key_edge[1])//下降沿檢測 </p><p>  data[3:0] <= data[3:0] + 1'b1; </p&

88、gt;<p><b>  end </b></p><p>  always @(posedge clock)//按鍵3 預置數(shù)高4位 </p><p><b>  begin </b></p><p>  if(key_edge[2])//下降沿檢測 </p>&

89、lt;p>  dat_r[7:4] <= dat_r[7:4] + 1'b1; </p><p><b>  end </b></p><p>  always @(posedge clock)//按鍵4 預置數(shù)低4位 </p><p><b>  begin </b></p>

90、<p>  if(key_edge[3])//下降沿檢測 </p><p>  dat_r[3:0] <= dat_r[3:0] + 1'b1; </p><p><b>  end </b></p><p>  assign rst = buff[4];//按鍵5 復位 </p&g

91、t;<p>  assign clkout = buff[5];//按鍵6 時鐘 </p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  if(key_edge[4])//按鍵5 復位 </p><

92、p><b>  begin </b></p><p>  data_shift = {1'b0,data};//重新裝載數(shù)據(jù) </p><p>  led_r = 8'd0; </p><p><b>  end </b></p><p>  else if(key_e

93、dge[5])//按鍵6 </p><p><b>  begin </b></p><p>  data_shift = data_shift << 1; </p><p>  led_r = {data_shift[8],led_r[7:1]};//LED左移顯示 </p><p>

94、;<b>  end </b></p><p><b>  end</b></p><p>  assign sda = data_shift[8];//串行序列碼輸出 </p><p>  //數(shù)碼管掃描顯示部分 </p><p>  always @(posedge clock)

95、 //定義上升沿觸發(fā)進程 </p><p><b>  begin </b></p><p>  if(div_clk) </p><p>  cnt3 <= cnt3 + 1'b1; </p><p><b>  end </b></p><p>  

96、always@(negedge key_edge[5] or negedge rst)</p><p><b>  begin</b></p><p><b>  if(~rst)</b></p><p>  state<=s0;//復位</p><p><b>  els

97、e</b></p><p><b>  begin</b></p><p>  case(state)</p><p>  s0:if(sda==dat[7])state<=s1;else state<=s0;//狀態(tài)s0</p><p>  s1:if(sda==dat[6])state&l

98、t;=s2;else state<=s0;//狀態(tài)s1</p><p>  s2:if(sda==dat[5])state<=s3;else state<=s0;//狀態(tài)s2</p><p>  s3:if(sda==dat[4])state<=s4;else state<=s0;//狀態(tài)s3</p><p>  s4:if

99、(sda==dat[3])state<=s5;else state<=s0;//狀態(tài)s4</p><p>  s5:if(sda==dat[2])state<=s6;else state<=s0;//狀態(tài)s5</p><p>  s6:if(sda==dat[1])state<=s7;else state<=s0;//狀態(tài)s6</p&g

100、t;<p>  s7:if(sda==dat[0])state<=s8;else state<=s0;//狀態(tài)s7</p><p>  default:state<=s0;</p><p><b>  endcase</b></p><p><b>  end</b></p>

101、<p><b>  end</b></p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  if(div_clk) </p><p><b>  begin </b&g

102、t;</p><p>  case(cnt3)//選擇掃描顯示數(shù)據(jù) </p><p>  3'd0:disp_dat = data[7:4];//第一個數(shù)碼管 </p><p>  3'd1:disp_dat = data[3:0];//第二個數(shù)碼管 </p><p>  3'd3:disp_da

103、t = dat[7:4];//第四個數(shù)碼管 </p><p>  3'd4:disp_dat = dat[3:0];//第五個數(shù)碼管 </p><p>  3'd7:disp_dat = disp;//第八個數(shù)碼管 </p><p>  default:disp_dat = 4'h0; </p><p>

104、<b>  endcase </b></p><p>  case(cnt3)//選擇數(shù)碼管顯示位 </p><p>  3'd0:dig_r = 8'b01111111;//選擇第一個數(shù)碼管顯示 </p><p>  3'd1:dig_r = 8'b10111111;//選擇第二個數(shù)碼管顯

105、示 </p><p>  3'd3:dig_r = 8'b11101111;//選擇第一個數(shù)碼管顯示 </p><p>  3'd4:dig_r = 8'b11110111;//選擇第二個數(shù)碼管顯示 </p><p>  3'd7:dig_r = 8'b11111110;//選擇第八個數(shù)碼管顯示 </

106、p><p>  default:dig_r = 8'b11111111; </p><p><b>  endcase </b></p><p><b>  end </b></p><p><b>  end </b></p><p>  al

107、ways @(disp_dat) </p><p><b>  begin </b></p><p>  case(disp_dat)//七段譯碼 </p><p>  4'h0:seg_r = 8'hc0;//顯示0 </p><p>  4'h1:seg_r = 8'

108、;hf9;//顯示1 </p><p>  4'h2:seg_r = 8'ha4;//顯示2 </p><p>  4'h3:seg_r = 8'hb0;//顯示3 </p><p>  4'h4:seg_r = 8'h99;//顯示4 </p><p>  4&

109、#39;h5:seg_r = 8'h92;//顯示5 </p><p>  4'h6:seg_r = 8'h82;//顯示6 </p><p>  4'h7:seg_r = 8'hf8;//顯示7 </p><p>  4'h8:seg_r = 8'h80;//顯示8 </

110、p><p>  4'h9:seg_r = 8'h90;//顯示9 </p><p>  4'ha:seg_r = 8'h88;//顯示a </p><p>  4'hb:seg_r = 8'h83;//顯示b </p><p>  4'hc:seg_r = 8'

111、;hc6;//顯示c </p><p>  4'hd:seg_r = 8'ha1;//顯示d </p><p>  4'he:seg_r = 8'h86;//顯示e </p><p>  4'hf:seg_r = 8'h8e;//顯示f </p><p><

112、b>  endcase </b></p><p><b>  end </b></p><p>  always @(state)</p><p><b>  begin</b></p><p>  if(state==s8)</p><p>  disp_

113、r<=4'hf;//序列碼檢測正確,輸出“F”</p><p><b>  else</b></p><p>  disp_r<=4'h0;//序列碼檢測錯誤,輸出“0”</p><p><b>  end</b></p><p><b>  end

114、module</b></p><p>  實驗箱上的操作步驟為:按KEY3\KEY4輸入檢測預置數(shù)(數(shù)碼管4\5上顯示),假設為“11001001”(C9);按KEY1\KEY2輸入待檢測序列碼(在數(shù)碼管1\2上顯示),也是“11001001” (C9)。設置好之后按KEY5復位(平時數(shù)碼管8顯示“0”)。然后按KEY6(CLK)8次,待檢測序列碼將串行輸入,輸入過程顯示于LED1~LED8上。若串行

115、輸入的序列碼(LED1~LED8)與預置數(shù)序列碼相同,數(shù)碼管8顯示“F”;否則仍顯示“0”。更改檢測預置數(shù)重復以上步驟再做驗證。</p><p>  實驗現(xiàn)象如下圖片所示:</p><p><b>  心得體會</b></p><p>  這次的EDA課程設計是很重要的,這個課題主要用到了我們一門重要的專業(yè)課EDA技術與VHDL的知識,所以可以

116、進一步鞏固我們所掌握的知識內(nèi)容 。這次為期11天的課程設計到現(xiàn)在已經(jīng)接近尾聲了,通過這次課設,我對課堂上的理論知識有了進步的了解與掌握,熟練掌握了實驗操作的各個步驟,同時也增強了對EDA程序設計的興趣。</p><p>  完成本次課程設計的過程,是一個從無到有的過程,從布置課題之后,11天的時間從查找資料,認真理解序列信號檢測器的原理,設計各個模塊的程序并仿真,然后硬件調(diào)試,最后編寫報告。要認真完成每個過程,每

117、個過程都不是一件簡單的事,雖然序列檢測器這個課題原理算是比較簡單的,不過程序編寫上也要仔細認真,此次設計的關鍵是狀態(tài)機的設計。同時報告寫起來也比較困難,不知道從哪些方面寫起,調(diào)理很清楚,但是文字上不知道如何編寫,后來逐漸找到了感覺,寫起來也比較得心應手了?,F(xiàn)在整個課程設計基本上已經(jīng)完成了,除了熟練掌握了序列信號檢測器的原理之外,對源程序的編寫也更加熟練。同時對EDA的課程設計有了初步的掌握,以后也許可以做更深層次的設計。在這次課設中得到

118、了同學的指導和幫助,使我受益匪淺,在此表示十分的感謝!</p><p>  這次課程設計讓我學會了許多的東西,提高了自己的動手能力,但是重要的是暴露了自己許多不足的地方,EDA理論知識掌握得不夠好,很多方面理解不清晰,實際操作能力也比較差,雖然通過這次課設有了一定的提高,不過顯然遠遠不足,所以以后的學習中,我將努力提高自己的能力,努力掌握理論知識并聯(lián)系實踐,改正自己的缺點!</p><p>

119、;<b>  參考文獻</b></p><p>  [1]周立功.EDA實驗與實踐.北京:北京航空航天大學出版社,2007.9.</p><p>  [2]劉昌華.數(shù)字邏輯EDA設計與實踐.北京:國防工業(yè)出版社,2006.8. </p><p>  [3]潘松,黃繼業(yè).EDA技術與VHDL.北京:清華大學出版社,2007.1.</p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論