基于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)]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泸州月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值