標(biāo)題: Verilog HDL自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)與仿真實(shí)驗(yàn)報(bào)告 [打印本頁(yè)]

作者: 見(jiàn)見(jiàn)你卡新浪    時(shí)間: 2017-11-10 11:16
標(biāo)題: Verilog HDL自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)與仿真實(shí)驗(yàn)報(bào)告
利用VerilogHDL來(lái)設(shè)計(jì)設(shè)計(jì)一個(gè)自動(dòng)售貨機(jī),機(jī)器設(shè)有2個(gè)投幣孔,可以接受一元和五角的硬幣,每瓶飲料2.5元,可用2個(gè)按鍵來(lái)代替。還設(shè)有2個(gè)輸出,要求有找零和提示信號(hào),分別輸出飲料和找零,編寫(xiě)一個(gè)測(cè)試平臺(tái),并通過(guò)仿真對(duì)該模型進(jìn)行測(cè)試。

自動(dòng)售貨機(jī)的設(shè)計(jì)與仿真

目錄

前言

一、設(shè)計(jì)程序

Verilog程序源代碼:

測(cè)試代碼:

二、程序仿真

仿真程序圖

系統(tǒng)的頂層原理圖如下:

三、程序說(shuō)明

電路變量分析

四、知識(shí)點(diǎn)說(shuō)明

五、實(shí)驗(yàn)結(jié)論及總結(jié)




前言

隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的飛速發(fā)展,電子線路的設(shè)計(jì)工作也日益顯得重要。經(jīng)過(guò)人工設(shè)計(jì)、制作實(shí)驗(yàn)板、調(diào)試再修改的多次循環(huán)才定型的傳統(tǒng)產(chǎn)品設(shè)計(jì)方法必然被計(jì)算機(jī)輔助設(shè)計(jì)所取代,因?yàn)檫@種費(fèi)時(shí)費(fèi)力又費(fèi)資源的設(shè)計(jì)調(diào)試方法既增加了產(chǎn)品開(kāi)發(fā)的成本,又受到實(shí)驗(yàn)工作場(chǎng)地及儀器設(shè)備的限制。為了克服上述困難,加拿大Interactive Image Technologies公司推出的基于Windows 95/98/NT操作系統(tǒng)的EDA軟件。他可以將不同類(lèi)型的電路組合成混合電路進(jìn)行仿真。此外,從另一角度來(lái)看,隨著計(jì)算機(jī)技術(shù)和集成電路技術(shù)的發(fā)展,現(xiàn)代電子與電工設(shè)計(jì),已經(jīng)步入了電子設(shè)計(jì)自動(dòng)化(EDA)的時(shí)代,采用虛擬仿真的手段對(duì)電子產(chǎn)品進(jìn)行前期工作的調(diào)試,已成為一種發(fā)展的必然趨勢(shì)。通過(guò)對(duì)實(shí)際電子線路的仿真分析,從而提高對(duì)電路的分析、設(shè)計(jì)和創(chuàng)新能力。

數(shù)字集成電路本身在不斷地進(jìn)行更新?lián)Q代。它由早期的電子管、晶體管、小中規(guī)模集成電路、發(fā)展到超大規(guī)模集成電路(VLSIC,幾萬(wàn)門(mén)以上)以及許多具有特定功能的專(zhuān)用集成電路。但是,隨著微電子技術(shù)的發(fā)展,設(shè)計(jì)與制造集成電路的任務(wù)已不完全由半導(dǎo)體廠商來(lái)獨(dú)立承擔(dān)。系統(tǒng)設(shè)計(jì)師們更愿意自己設(shè)計(jì)專(zhuān)用集成電路(ASIC)芯片,而且希望ASIC的設(shè)計(jì)周期盡可能短,最好是在實(shí)驗(yàn)室里就能設(shè)計(jì)出合適的ASIC芯片,并且立即投入實(shí)際應(yīng)用之中,因而出現(xiàn)了現(xiàn)場(chǎng)可編程邏輯器件(FPLD),其中應(yīng)用最廣泛的當(dāng)屬現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)和復(fù)雜可編程邏輯器件(CPLD)。

FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)與 CPLD(復(fù)雜可編程邏輯器件)都是可編程邏輯器件,它們是在PAL,GAL等邏輯器件的基礎(chǔ)之上發(fā)展起來(lái)的。同以往的PAL,GAL等相比較,F(xiàn)PGA/CPLD的規(guī)模比較大,它可以替代幾十甚至幾千塊通用IC芯片。這樣的FPGA/CPLD實(shí)際上就是一個(gè)子系統(tǒng)部件。

本次EDA課程設(shè)計(jì)就是利用VerilogHDL來(lái)設(shè)計(jì)設(shè)計(jì)一個(gè)自動(dòng)售貨機(jī),機(jī)器設(shè)有2個(gè)投幣孔,可以接受一元和五角的硬幣,每瓶飲料2.5元,可用2個(gè)按鍵來(lái)代替。還設(shè)有2個(gè)輸出,要求有找零和提示信號(hào),分別輸出飲料和找零,編寫(xiě)一個(gè)測(cè)試平臺(tái),并通過(guò)仿真對(duì)該模型進(jìn)行測(cè)試。

一、設(shè)計(jì)程序Verilog程序源代碼:
  1. module sell(yi_yuan,wu_jiao,  get,half_out,sell_out,reset,clk);
  2. parameter idle=0, half=1, one=2,two=3,three=4;
  3. input yi_yuan,wu_jiao,reset,clk;
  4. output get,half_out,sell_out;
  5. reg get,half_out,sell_out;
  6. reg[2:0] s;

  7. always @(posedge clk)

  8. begin
  9. if(reset)
  10.         begin
  11.         sell_out=0;   get=0;  half_out=0;  s=idle;
  12.         end
  13.   else
  14. case(s)
  15.       idle: begin
  16.         sell_out=0;   get=0; half_out=0;
  17.        if(wu_jiao)  s=half;
  18.          else  if(yi_yuan)s=one;
  19.       end
  20. half: begin
  21. if(wu_jiao)  s=one;
  22.         else if(yi_yuan)
  23.          s=two;
  24.            end
  25. one: begin
  26.   if(wu_jiao) s=two;
  27.          else if(yi_yuan)s=three;
  28.    end
  29. two:   begin
  30.         if(wu_jiao) s=three;
  31.           else if(yi_yuan)
  32.                begin
  33.    sell_out=1;get=1;  s=idle;
  34.                end
  35. end
  36.    three:  begin
  37.    if(wu_jiao)
  38.            begin
  39.      sell_out=1; get=1;  s=idle;
  40.            end
  41.    else if(yi_yuan)
  42.           begin
  43. …………
  44. …………
  45. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
測(cè)試代碼:
`timescale 1ns/1ns
module sell_top;
reg yi_yuan,wu_jiao,reset,CLK;
wire get,half_out,sell_out;
always #50 CLK=~CLK;
initial
begin
CLK =0; reset=1;
#100                reset=0;
yi_yuan=0;
wu_jiao=0;
end

always@(posedge CLK)
begin
  wu_jiao={$random}%2;#50 wu_jiao=0;
  end
always@(posedge CLK)
begin
  if(!wu_jiao)yi_yuan=1;#50 yi_yuan=0;
end
sell m(.yi_yuan(yi_yuan),.wu_jiao(wu_jiao), .get(get),
.half_out(half_out),.sell_out(sell_out),.reset(reset),.clk(CLK));
endmodule
二、程序仿真仿真程序圖

仿真波形及分析

分析前仿真波形,每個(gè)時(shí)鐘周期為100ns,如圖:在100ns系統(tǒng)復(fù)位,到550ns時(shí),輸入5個(gè)wu_jiao信號(hào),get和sell_out信號(hào)出現(xiàn)告電平,持續(xù)100ns,表示賣(mài)出和取飲料信號(hào)。第三組開(kāi)始輸入信號(hào):在1050ns且為上升沿時(shí),1個(gè)yi_yuan高電平,后接著倆wu_jiao高電平,又一個(gè)yi_yuan高電平,half_out/get和sell_out信號(hào)出現(xiàn)告電平持續(xù)100ns,表示分別有賣(mài)出、找零和取飲料信號(hào)。在1850ns時(shí)第5組測(cè)試數(shù)據(jù)開(kāi)始,同時(shí)為時(shí)鐘上升沿,分別有三個(gè)wu_jiao和一個(gè)yi_yuan高電平,滿(mǎn)足輸出,get、sell_out同時(shí)為高,持續(xù)100ns,表示分別賣(mài)出和取飲料信號(hào)。

系統(tǒng)的頂層原理圖如下

1.本次仿真實(shí)驗(yàn)通過(guò)對(duì)自動(dòng)售貨機(jī)狀態(tài)轉(zhuǎn)換圖的分析得出其工作原理,并根據(jù)工作原理編寫(xiě)出Verilog HDL源程序;

2.通過(guò)仿真驗(yàn)證,該設(shè)計(jì)能較好的實(shí)現(xiàn)自動(dòng)售貨機(jī)的基本功能;

3.根據(jù)仿真結(jié)果,仿真輸出與理論值相比有一定的延時(shí),這是系統(tǒng)誤差,難以消除。

三、程序說(shuō)明電路變量分析
根據(jù)設(shè)計(jì)要求,共有七個(gè)變量。
clk:時(shí)鐘輸入;
reset:系統(tǒng)復(fù)位信號(hào);
wu_jiao:代表投入五角硬幣;
yi_yuan:代表投入一元硬幣;
half_out:售貨機(jī)找回一枚五角硬幣信號(hào);
sell_out:機(jī)器售出一瓶飲料;
get:提示投幣者取走飲料。
四、知識(shí)點(diǎn)說(shuō)明

1、從仿真的角度來(lái)說(shuō),HDL語(yǔ)言面對(duì)的是編譯器(如Modelsim等),相當(dāng)于軟件思路。 這時(shí):

wire對(duì)應(yīng)于連續(xù)賦值,如assign

reg對(duì)應(yīng)于過(guò)程賦值,如always,initial  

從綜合的角度來(lái)說(shuō),HDL語(yǔ)言面對(duì)的是綜合器(如DC等),要從電路的角度來(lái)考慮。 這時(shí):

1、wire型的變量綜合出來(lái)一般是一根導(dǎo)線; 2、reg變量在always塊中有兩種情況:

(1)、always后的敏感表中是(a or b or c)形式的,也就是不帶時(shí)鐘邊沿的,綜合出來(lái)還是組合邏輯

(2)、always后的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來(lái)一般是時(shí)序邏輯,會(huì)包含觸發(fā)器(Flip-Flop)  

2、verilog中always@(posedge clk)無(wú)競(jìng)爭(zhēng)冒險(xiǎn),因?yàn)檫@是時(shí)序電路,a和c值的更新是在時(shí)鐘沿到來(lái)時(shí)才會(huì)被采樣的,你所看見(jiàn)的一個(gè)時(shí)鐘周期,就是周期的概念,是延遲一周期后才賦值的,比如在0時(shí)刻,你給b,a一個(gè)初值1,1,而之前b,a值為0,0,則此時(shí)a為0的那個(gè)值賦給c,b為0值賦給a,在運(yùn)行完這之后,由于有新值a=1,a值變化,a為1,即此時(shí)a=1,b=1,c=0,在下個(gè)周期時(shí),c才等于1的。

3、#加數(shù)字表示延遲

4、Verilog中Timescale的用法

(1)`timescale 1ns / 1ps,含義為:時(shí)延單位為1ns,時(shí)延精度為1ps。

(2)在編譯過(guò)程中,`timescale會(huì)影響其后面所有模塊中的時(shí)延值,直至遇到另一個(gè)`timescale指令或`resetall指令。

(3) 當(dāng)一個(gè)設(shè)計(jì)中的多個(gè)模塊帶有自身的`timescale編譯指令時(shí),模擬器將定位在所有模塊的最小時(shí)延精度上,并且所有時(shí)延都相應(yīng)地?fù)Q算為最小時(shí)延精度。

5、$random(seed)是verilog中最簡(jiǎn)單的產(chǎn)生隨機(jī)數(shù)的系統(tǒng)函數(shù),給$random傳入了參數(shù)seed。

6、reg [2:0]s:定義一個(gè)三位的計(jì)數(shù)器

7、parameter 作用于聲明的那個(gè)文件;`define 從編譯器讀到這條指令開(kāi)始到編譯結(jié)束都有效,或者遇到`undef命令使之失效。狀態(tài)機(jī)的定義可以用parameter 定義,但是不推薦使用`define 宏定義的方式,因?yàn)?define 宏定義在編譯時(shí)自動(dòng)替換整個(gè)設(shè)計(jì)中所定義的宏,而parameter 僅僅定義模塊內(nèi)部的參數(shù),定義的參數(shù)不會(huì)與模塊外的其他狀態(tài)機(jī)混淆。

五、實(shí)驗(yàn)結(jié)論及總結(jié)

    通過(guò)此次仿真實(shí)驗(yàn)—基于狀態(tài)機(jī)的自動(dòng)售貨機(jī)的設(shè)計(jì),我掌握了Quartus II軟件的基本使用方法以及Verilog HDL語(yǔ)言的語(yǔ)法特點(diǎn),可以初步編寫(xiě)一些邏輯功能較為簡(jiǎn)單的源程序。同時(shí),通過(guò)此次實(shí)驗(yàn),我掌握了設(shè)計(jì)工作的完整流程,為以后的課程設(shè)計(jì)積累了寶貴的經(jīng)驗(yàn)。最后,實(shí)驗(yàn)過(guò)程中難免遇到一些問(wèn)題,我們要冷靜分析,找出原因?傊ㄟ^(guò)此次實(shí)驗(yàn),我學(xué)到了許多有益的知識(shí)。


以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便大家保存):(共11頁(yè)):
Verilog HDL--自動(dòng)售貨機(jī)設(shè)計(jì).docx (153.49 KB, 下載次數(shù): 210)



作者: 798222964    時(shí)間: 2018-4-23 11:10
很棒+++++
作者: 學(xué)渣的領(lǐng)地    時(shí)間: 2018-6-4 10:23
很棒,很實(shí)用,哈哈哈
作者: christ_1996    時(shí)間: 2018-6-10 18:26
為什么測(cè)試?yán)镎伊阈盘?hào)一直是低電平
作者: 淺醉    時(shí)間: 2019-6-27 15:33
解難了
作者: JiawenMing    時(shí)間: 2019-7-6 21:02
很有用
作者: 鵬博士PBs    時(shí)間: 2019-7-6 22:16
感謝分享
作者: johnnycarto    時(shí)間: 2020-6-9 11:35
感覺(jué)樓主的分享
作者: 1726739743    時(shí)間: 2020-11-27 11:02
798222964 發(fā)表于 2018-4-23 11:10
很棒+++++

這個(gè)怎么仿真

作者: 2263791600    時(shí)間: 2021-10-31 08:12
1726739743 發(fā)表于 2020-11-27 11:02
這個(gè)怎么仿真

用quartus ii
作者: 123yyy@    時(shí)間: 2022-6-22 09:54
求源代碼
作者: userman    時(shí)間: 2023-12-14 20:45
他的找零,售出,取品怎么都是低電平




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1