基於VHDL數據分流方法程序實現

基於VHDL數據分流方法程序實現

過程(procedure)

  1. 過程與函數的使用目的相似,也是希望將其功能實現的代碼被共享和重用,使主代碼簡潔並易於理解。 過程通常用來定義一個算法,而函數用來產生一個具有特定意義的值;
  2. 注意:過程與函數的主要差別就是過程可以有多個返回值。
  3. 過程的使用過程:先定義過程,再調用過程。

過程的存放形式

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TQBsm00S-1590662475588)(G:\研究生\FPGA課程\筆記文檔\rec\fesfesf1.png)]

功能描述:

過程sort的功能描述:對輸入兩個8位的無符號整數進行比較,數值小的從min_out輸出,數值大的從max_out輸出。多個輸出,宜採用過程方式;

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aSAy4vME-1590662475594)(G:\研究生\FPGA課程\筆記文檔\rec\rgegehg.png)]

**實現方式:**在包集中定義函數,在主代碼中調用。

實驗內容

(1) 用VHDL通過在包集中定義函數,實現過程sort的數據分流。

(2) 將源程序進行綜合、優化及功能仿真。

(3)軟件說明:ModelSimSetup-13.1.0.162,QuartusSetup-13.1.0.162。

建立工程:

第一步:打開Quartus軟件。

第二步:點擊New Project Wizard -> next.

第三步:選擇工程文件的存放位置,輸入工程名 -> next -> next。

第四步:在family欄選擇芯片型號-Cyclone IV E,在Name欄選擇EP4CE115F29C7,選擇完之後點擊next。(如果不進行硬件調試時,此處默認即可)

第五步:檢查工程有沒有建錯,點擊完成。如下圖:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bpypHOtO-1590662475598)(G:\研究生\FPGA課程\筆記文檔\rec\20161122122950778.png)]

程序設計:

方法一:(在包集中定義過程)

在包集中定義過程,可以方便地被其它設計所重用和共享。注意:函數在package中聲明,在package body中定義。

全加器頂層文件設計:

--文件名:min_max1.vhd 應與工程名保持一致:
----------------在主代碼中調用包集中的過程sort-----------------
library ieee;
use ieee.std_logic_1164.all;
USE work.my_package.all;
entity min_max1 is
     generic(limit: integer :=255);
      port ( ena: in bit;      
                 inp1, inp2: in integer range 0 to limit;
                min_out, max_out: out integer range 0 to limit);
end min_max1;
architecture my_arch of min_max1  is
begin
       process (ena)
       begin
            if (ena='1') then sort (inp1, inp2, min_out, max_out);
            end if;
        end process;
end my_arch;      

–在包集中定義過程程序實現:

--文件名:my_package.vhl

-------在包集中定義過程sort------------
library ieee;
use ieee.std_logic_1164.all;
package  my_package is
	  CONSTANT  limit: integer :=255;
	  PROCEDURE sort  (
				  signal in1, in2: in integer range 0 to limit;
				  signal min, max: out integer range 0 to limit);
end package;
package body  my_package is
	  procedure sort (
			  signal in1, in2: in integer range 0 to limit;
			  signal min, max: out  integer range 0 to limit)  is
			begin
					 if (in1>in2) then   max<=in1; min<=in2;
					 else             max<=in2; min<=in1;
					 end if;
		end sort;
end my_package;


方法二:(在主代碼中定義過程)

在主代碼中定義過程, 可以出現在entity中,也可以出現在architecture中。如存放於architecture中的聲明:

--文件名:min_max1.vhd 應與工程名保持一致:
-------在主代碼中調用包集中定義的函數-------------- 
library ieee;
use ieee.std_logic_1164.all;
entity min_max1 is
     generic(limit: integer :=255);
      port ( ena: in bit; 
				 inp1, inp2: in integer range 0 to limit;
                min_out, max_out: out integer range 0 to limit);
end min_max1;
architecture my_arch of min_max1  is
      procedure sort (signal in1, in2: in integer range 0 to limit;
                                  signal min, max: out  integer range 0 to limit)  is
          begin
                if (in1>in2) then   max<=in1; min<=in2;
                else             max<=in2; min<=in1;
                end if;
      end sort;
begin
       process (ena)
       begin
            if (ena='1') then sort (inp1, inp2, min_out, max_out);
            end if;
        end process;
end my_arch;   

文件仿真(這裏採用modelsim仿真波形):

  1. 選擇File-> New -> Verification/Debugging Files ->University Program VWF。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CNx7nmTm-1590662475608)(G:\研究生\FPGA課程\筆記文檔\rec\QQ截圖20200423165155.png)]

2.打開測試文件。(右鍵點擊添加端口,對輸入信號初始化,賦值。)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0nA4dmZ2-1590662475611)(G:\研究生\FPGA課程\筆記文檔\rec\QQ截圖20200528183742.png)]

3.仿真結果:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Z3KZ1l7L-1590662475613)(G:\研究生\FPGA課程\筆記文檔\rec\QQ截圖20200528183726.png)]

邏輯電路圖:

顯示編譯成功後,選擇菜單欄 Tools –>Netlist Viewers –>RTL Viewer 顯示邏輯電路圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-N04sGcRn-1590662475615)(G:\研究生\FPGA課程\筆記文檔\rec\QQ截圖20200528183827.png)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章