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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

26、1,//狀態(tài)機(jī)參數(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;//輸出檢測結(jié)果</p><p>  always@(posedge clk or negedge rst)</p><p><b>  begin</b></p><p><b>  if(~rst)</b></p><p>  

28、state<=s0;//復(fù)位</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;//序列碼檢測錯(cuò)誤,輸出“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)時(shí)鐘 </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)生時(shí)鐘信號輸出 </p><p>

37、;  output rstout;//產(chǎn)生復(fù)位信號輸出 </p><p>  output[7:0]dat;//8位預(yù)置數(shù)輸出 </p><p>  input[3:0]disp;//輸入檢測結(jié)果 </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í)鐘分頻計(jì)數(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ù)碼管掃描計(jì)數(shù)器 </p><p>  reg[3:0]disp_dat; //數(shù)碼管掃描顯存 </p&

40、gt;<p>  reg div_clk;//分頻時(shí)鐘,用于消抖和掃描 </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>  //時(shí)鐘分頻部分 </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 預(yù)置數(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 預(yù)置數(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 復(fù)位 </p><p>  assign clkout = buff[5];//按鍵6 時(shí)鐘 </p><p>  always @(posedge clock) </p><p><b>  begin </b></p>

54、<p>  if(key_edge[4])//按鍵5 復(fù)位 </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ā)進(jìn)程 </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];//第一個(gè)數(shù)碼管 </p><p>  3'd1:disp_dat = data[3:0];//第二個(gè)數(shù)碼管 </p><p>  3'd3:disp

60、_dat = dat[7:4];//第四個(gè)數(shù)碼管 </p><p>  3'd4:disp_dat = dat[3:0];//第五個(gè)數(shù)碼管 </p><p>  3'd7:disp_dat = disp;//第八個(gè)數(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;//選擇第一個(gè)數(shù)碼管顯示 </p><p>  3'd1:dig_r = 8'b10111111;//選擇第二個(gè)數(shù)

62、碼管顯示 </p><p>  3'd3:dig_r = 8'b11101111;//選擇第四個(gè)數(shù)碼管顯示 </p><p>  3'd4:dig_r = 8'b11110111;//選擇第五個(gè)數(shù)碼管顯示 </p><p>  3'd7:dig_r = 8'b11111110;//選擇第八個(gè)數(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)時(shí)鐘 </p><p>  input[5:0]key;//按鍵輸入 </p><p>  //inputsda;/

71、/串行序列碼輸入</p><p>  wirerst;//復(fù)位信號輸入</p><p>  //input[3:0]disp;//輸入檢測結(jié)果 </p><p>  //input[7:0]dat;//輸入待檢測預(yù)置數(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)生時(shí)鐘信號輸出 <

73、;/p><p>  output[7:0]dat;//8位預(yù)置數(shù)輸出 </p><p>  output[3:0]disp;//檢測結(jié)果輸出</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í)鐘分頻計(jì)數(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ù)碼管掃描計(jì)數(shù)器 </p><p>  reg[3:0]disp_dat; //數(shù)碼管掃描顯存 </p><p>  reg div_clk;//分

76、頻時(shí)鐘,用于消抖和掃描 </p><p>  reg[3:0]disp_r;//檢測結(jié)果輸出寄存器</p><p>  reg[3:0]state;//狀態(tài)機(jī)寄存器</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)機(jī)參數(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、結(jié)果</p><p><b>  //時(shí)鐘分頻部分 </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 預(yù)置數(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 預(yù)置數(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 復(fù)位 </p&g

91、t;<p>  assign clkout = buff[5];//按鍵6 時(shí)鐘 </p><p>  always @(posedge clock) </p><p><b>  begin </b></p><p>  if(key_edge[4])//按鍵5 復(fù)位 </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ā)進(jìn)程 </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;//復(fù)位</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];//第一個(gè)數(shù)碼管 </p><p>  3'd1:disp_dat = data[3:0];//第二個(gè)數(shù)碼管 </p><p>  3'd3:disp_da

103、t = dat[7:4];//第四個(gè)數(shù)碼管 </p><p>  3'd4:disp_dat = dat[3:0];//第五個(gè)數(shù)碼管 </p><p>  3'd7:disp_dat = disp;//第八個(gè)數(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;//選擇第一個(gè)數(shù)碼管顯示 </p><p>  3'd1:dig_r = 8'b10111111;//選擇第二個(gè)數(shù)碼管顯

105、示 </p><p>  3'd3:dig_r = 8'b11101111;//選擇第一個(gè)數(shù)碼管顯示 </p><p>  3'd4:dig_r = 8'b11110111;//選擇第二個(gè)數(shù)碼管顯示 </p><p>  3'd7:dig_r = 8'b11111110;//選擇第八個(gè)數(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;//序列碼檢測錯(cuò)誤,輸出“0”</p><p><b>  end</b></p><p><b>  end

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論