<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于FPGA的搶答器設計與實(shí)現

基于FPGA的搶答器設計與實(shí)現

作者: 時(shí)間:2012-01-04 來(lái)源:網(wǎng)絡(luò ) 收藏

  

 圖7.程序流程圖

  圖注: 顯示“FF+成績(jì)”中FF 表示無(wú)效狀態(tài),成績(jì)表示上一次搶答的那個(gè)小組的成績(jì);顯示“FX+成績(jì)”表示搶答小組答題完并進(jìn)行評分操作后的組號和成績(jì);顯示“XF+成績(jì)”表示違規搶答的那個(gè)小組組號及減1分后的成績(jì)信息(X 表示1,2,3)。這里“+”是為了區分組號和成績(jì)信息,數碼管并不顯示加號,下同。

  用Verilog HDL 分別編寫(xiě)各個(gè)模塊,然后在ISE 環(huán)境下運行程序,調試成功。最后生成的頂層模塊的方塊圖如圖8 所示。

  

  圖8.頂層模塊圖

  圖注:Line(2:0)和row(2:0)分別表示參賽小組按鍵的輸入陣列信號和輸出掃描陣列信號;start_key,add_key, sub_key,分別代表?yè)尨痖_(kāi)始命令,對各組成績(jì)的加、減操作命令;dp,error,push_key 分別表示開(kāi)始鍵按下后的信號,違規搶答信號以及參賽組有人按鍵的響應信號;hc_cp,hc_si 表示顯示譯碼芯片74HC164 的串行時(shí)鐘和數據信號。

  問(wèn)題與解決

  1、狀態(tài)機問(wèn)題

  在整體調試的時(shí)候,當主持人按開(kāi)始按鈕后,程序就死在那里,不能接收搶答信息,由于搶答鍵盤(pán)已單獨調試成功,因此懷疑是控制搶答過(guò)程的狀態(tài)機除了問(wèn)題,指示進(jìn)入開(kāi)始狀態(tài)的紅色LED燈一直亮著(zhù),說(shuō)明程序的確死在開(kāi)始狀態(tài)。再次綜合的過(guò)程中發(fā)現警告提示:狀態(tài)機的狀態(tài)量的賦值錯誤,把二進(jìn)制標識“b”誤寫(xiě)為“h”,這樣由于狀態(tài)機數據寬度小于時(shí)間數據數據長(cháng)度,自動(dòng)取較小位數據;如state_start = 4‘b0010誤寫(xiě)為state_start = 4’h0010,實(shí)際就是state_start = 4’b0000,這肯定與前面狀態(tài)沖突;同時(shí)調試過(guò)程中也遇到過(guò)復位時(shí)沒(méi)有把狀態(tài)機復位到初始狀態(tài)的情況。經(jīng)過(guò)此次設計,體會(huì )認識到狀態(tài)機在實(shí)際控制中的重要性,以后設計中要學(xué)會(huì )看綜合布線(xiàn)過(guò)程中警告信息。

  2、信號同步的問(wèn)題

  在搶答器按下開(kāi)始鍵后有一個(gè)等待搶答30s 的延遲時(shí)間,當30s 完成后如果三個(gè)小組都沒(méi)有人按搶答鍵,那么此次比賽搶答無(wú)效,系統自動(dòng)回到主持人按開(kāi)始前的系統等待狀態(tài);當計時(shí)完成30s 后生成一個(gè)高電平的脈沖信號(pulse),由于此脈沖信號高電平持續時(shí)間是整個(gè)系統的系統時(shí)鐘(clk),這個(gè)時(shí)鐘周期小于狀態(tài)機的時(shí)鐘周期(clk_4),直接用狀態(tài)機的時(shí)鐘是檢測不到此脈沖信號,需要把此脈沖信號同步到與狀態(tài)機時(shí)鐘同步。

  采用的方法是:首先用一個(gè)鎖存器(pulse_reg)鎖存此脈沖信號(鎖存器時(shí)鐘也為系統時(shí)鐘),通過(guò)鎖存器的輸出值和原脈沖信號寄存器值就可以檢測到脈沖由低電平0 到高電平1 的跳變沿,同樣用一個(gè)與系統時(shí)鐘同步的鎖存器(flag)鎖存這個(gè)跳變沿,當出現這個(gè)跳變沿時(shí)flag=1;而為了讓狀態(tài)機時(shí)鐘(clk_4)檢測到flag 信號,同時(shí)要在狀態(tài)機時(shí)鐘檢測到后要把flag 清零,為下一次檢測作準備,這時(shí)可以當狀態(tài)機時(shí)鐘(clk_4)檢測到flag=1’b1 后,同時(shí)生成一個(gè)flag的清零信號(flag_rst)flag_rst=1’b1;當flag_rst 為1 時(shí)把flag 清零。

  調試信號同步的部分程序如下:

  reg flag_rst; //生成flag_rst 信號

  always @ (posedge clk_4 or negedge rst_n)

  begin

  if(!rst_n)

  begin

  flag_rst = 1‘b0;

  end

  else

  begin

  if(flag == 1’b0)

  flag_rst = 1‘b0;

  else

  begin

  flag_rst = 1’b1;

  end

  end

  end

  always @ (posedge clk)

  begin

  pulse_reg = pulse;

  end

  reg flag; //flag 用來(lái)檢測pulse 上升沿

  always @ (posedge clk)

  begin

  if(!rst_n)

  flag = 1’b0;

  else

  begin

  if((pulse_reg == 1‘b0)(pulse == 1’b1))

  flag = 1‘b1;

  else if(flag_rst == 1’b1)

  flag = 1‘b0;

  end

  end

  reg flag_reg; //生成與clk_4 同步的用于檢測脈沖上升沿信號的flag 信號

  always @ (posedge clk_4)

  begin

  flag_reg = flag;

  end

  用modesim6.0 仿真波形如下:

  

  圖9.信號的同步的仿真波形

  從仿真波形中可以看出當pulse 高電平時(shí)的下一個(gè)時(shí)鐘flag = 1’b1;為了讓時(shí)鐘clk_4 能夠檢測到flag = 1’b1,就讓flag 一直保存到clk_4 上升沿出現,然后在clk_4 上升沿把flag 的復位信號flag_rst 置1;然后flag, flag_rst都清零。改變pulse 脈沖出現的時(shí)間或者clk_4 的頻率都能檢測到pulse 的高電平。經(jīng)過(guò)信號同步后,狀態(tài)機能夠檢測搶答計時(shí)完30s 后生成的一個(gè)脈沖信號然后回到初狀態(tài)。

  時(shí)序設計是數字電路電路的主要工作,在設計中一定要明白信號如何傳遞,在何時(shí)賦值,何時(shí)信號值需要改變等,這樣才能更好的設計。在需要改變寄存器值的時(shí)刻沒(méi)有對寄存器進(jìn)行操作,會(huì )造成結果的錯誤。

  設計結果

  根據搶答器功能要求,規劃程序包括的子模塊,并編寫(xiě)Verilog 代碼,在硬件電路上調試運行成功。

  操作過(guò)程:開(kāi)始時(shí)對,整個(gè)系統復位(默認每組成績(jì)?yōu)?0 分),數碼管顯示“FF+10”。在主持人發(fā)出開(kāi)始搶答的Start 之后,參賽隊員就可以按自己前面的搶答按鈕,同時(shí)用數碼管左邊兩位計時(shí)搶答時(shí)間30s,如果在30s 內各組都無(wú)人搶答,則此次搶答無(wú)效,系統自動(dòng)回到開(kāi)始前的初狀態(tài)(數碼管顯示“FF+成績(jì)”),等待下一次操作;主持人可根據回答爭取與否,以及是否違規搶答,決定加減分(Add 為加分控制,Sub 為減分控制),加減操作后系統又回到開(kāi)始前的等待狀態(tài)。設計中,哪個(gè)組搶答,就顯示哪個(gè)組的信息。如果搶答沒(méi)有違規(按開(kāi)始后搶答)則顯示器左邊兩位顯示“FX”;反之,則顯示“XF”,X 代表組號1,2,3。按照操作方法,以第1 組搶答為例在VX_SP306 開(kāi)發(fā)平臺上運行看看數碼管顯示及整個(gè)過(guò)程:

  1、在系統復位后顯示“FF+10”;

  2、等待主持人按開(kāi)始狀態(tài);

  3、主持人按開(kāi)始按鈕前第1 組搶答,顯示“1F+10”,減1 分操作后顯示“1F+09”;回到步驟2;

  4、主持人按開(kāi)始按鈕后,顯示“30+10”;30 每秒鐘減1 直到00;

  5、在30s 內第1 組搶答,顯示“F1+10”,主持人根據回答情況進(jìn)行加、減分操作,顯示“F1+分數”;然后回到步驟2;

  6、如果在30s 內沒(méi)有人搶答,顯示“FF+10”,回到步驟2。

fpga相關(guān)文章:fpga是什么


蜂鳴器相關(guān)文章:蜂鳴器原理

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FPGA 搶答器設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>