日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

数字系统设计学习之VHDL输入设计

發(fā)布時間:2025/3/15 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字系统设计学习之VHDL输入设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

繼續(xù)數(shù)字系統(tǒng)設(shè)計的學習,對QuartusII9的使用相對開始熟悉了很多,正好課程進度學習到了VHDL語言,嘗試用VHDL語言完成板載測試,本次實現(xiàn)的功能是花式流水燈。
本文原創(chuàng),創(chuàng)作不易,轉(zhuǎn)載請注明!!!
本文鏈接
個人博客:https://ronglin.fun/?p=260
PDF鏈接:見博客網(wǎng)站
CSDN: https://blog.csdn.net/RongLin02/article/details/115432284

實現(xiàn)流水燈

創(chuàng)建project

用QuartusII 新建一個名為water_led的項目文件。

芯片照常選擇FLEX10K中的FLEX10K20TC144-4,如果這里選錯了后面也可以改的

接下來就是一路next就行了。

VHDL

新建文件

下面新建一個VHDL文件,菜單欄File–New–VHDL File然后ok就行了。

效果設(shè)計和源碼

首先我想的是實現(xiàn)一個8位led燈的流水燈,根據(jù)cp信號,從右到左,然后交替亮,最后變成全0,大概如下:

00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000010101010 01010101 11111111 00000000

大概我想實現(xiàn)的效果就是這樣,然后開始頭禿敲源碼

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;ENTITY water_led is --配置實體port(CLK,CLR : in std_logic;res : out std_logic_vector(7 downto 0)); end ;architecture func of water_led is --配置結(jié)構(gòu)體 signal state : integer range 11 downto 0 := 0; --定義信號,全局量 beginprocess(CLR,CLK) --監(jiān)聽時鐘信號和清0信號beginif CLR = '1' thenres <= "00000000";state <= 0;elsif CLK'event and CLK = '1' then --時鐘變化且上升沿state <= state+1; --每次觸發(fā)全局量自增if state < 8 thenres <= conv_std_logic_vector(2**state,8);elsif state = 8 thenres <= "10101010";elsif state = 9 thenres <= "01010101";elsif state = 10 thenres <= "11111111";elsif state = 11 thenres <= "00000000";state <= 0; --從頭開始end if;end if;end process; end func;

簡單的提示一下細節(jié)和可能出現(xiàn)的問題:
就說一下這句代碼res <= conv_std_logic_vector(2**state,8);,函數(shù)conv_std_logic_vector()的作用是將整型轉(zhuǎn)化為位矢量,第一個參數(shù)為要轉(zhuǎn)化的整數(shù),第二個參數(shù)是轉(zhuǎn)化的位矢量的位寬。
問題可能有:
1.沒法輸入中文。可能是QuartusII9太老了,沒法輸入中文,可以先用記事本,輸入好中文,然后copy過去。
2.信號變量延遲問題。編程過程中,代碼邏輯沒問題,但是仿真在第一輪循環(huán)之后總會多一個cp周期之后才開始第二輪的循環(huán)。剛開始并沒有留意,板載的時候才明顯的感受到,后來查了資料才知道,信號的賦值是有延遲的,仔細分析分析我的代碼,在最后state <= 0;之后,第二次循環(huán)開始,執(zhí)行到state <= state+1;如果按照軟件設(shè)計思想,現(xiàn)在的state的值應(yīng)該是1,然后res應(yīng)該輸出的值是2的1次方,就應(yīng)該第二輪第一個值是2,但是不論看仿真還是看板載測試,都是從1開始,說明信號的賦值是延遲的。有關(guān)更多這篇博客有詳細的說明:https://blog.csdn.net/qijitao/article/details/50629305

編譯

編譯之前需要簡單的配置一下,如果之前選錯了芯片的話,可以在Assignments–Setting中,左側(cè)選擇Device,然后就可以修改芯片了,如果還想修改更詳細的配置,例如配置文件格式啥的,可以在右側(cè)中的Device and Pin Opinions中修改。

同時,教材上還提供了選擇編譯模式的方法。就是在Assignments–Setting中,選擇左側(cè)的Compilation Process Settings,然后在右側(cè)勾選上Use smart compilation和Preserve fewer node names to save disk space,據(jù)說可以讓每一次重復編譯運行的更快。

之后就是編譯了,可以直接點擊快捷欄的start Compilation的倒三角按鈕,也可以在菜單欄中Processing中選擇start Compilation,一樣的。
編譯成功成功之后,還可以看生成的寄存器傳輸級(RTL),菜單欄Tool–Netlist Viewers–RTL Viewer,就可以看到了。

仿真與板載

仿真和之前的一樣了,菜單欄File–New–Vector Waveform File然后ok就行了。
有關(guān)仿真波形圖的使用,我的另一篇博客中有詳細的講解:數(shù)字系統(tǒng)設(shè)計學習之QuartusII9下載程序
只需注意時鐘信號的設(shè)置方法,全選中CLK信號,在左側(cè)找到一個帶有小鐘表的圖標,名為Overwrite Clock

然后就可以設(shè)置時鐘信號了。時鐘時長設(shè)為1us,間隔設(shè)為50ns一變

直接看結(jié)果

循環(huán)是1-2-4-8-16-32-64-128-170-85-255-0,和我設(shè)計的一樣。
在Assignments–Pins中選好陣腳,然后一定要記得再編譯一次,查看板載測試,板載的時候一定要注意重啟設(shè)置禁用數(shù)字簽名

成功了,=w=

總結(jié)

以上是生活随笔為你收集整理的数字系统设计学习之VHDL输入设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。