⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jishuqi.vhd

📁 一些很好的FPGA设计实例
💻 VHD
字号:
--VHDL提供了SIGNAL 和VARIABLE这两种对象来处理非静态数据,同时提供了CONSTANT和GENERIC这两种对象来处理
--静态数据,常量和信号是全局的,变量是局部的。
--常量用来确定默认值
--格式为:constant 常量名 :type :=值
--例如: constant set_bit : bit  :='1';
--       constant datamemory : memory :=(('0' '0' '0' '0' ),
--                                      ('0' '0' '0' '1' ),
--                                       ('0' '0' '1' '1' ));
----------------------------------------------------------------------
--vhdl中的信号代表的是逻辑电路的连线
--格式:signal name: type{range} [:=initial_value];对信号进行赋初始值时的操作是不可综合的只能通用于仿真
--当信号在顺序描述语句中时,其值不是立即更新的,而是在相应的进程,函数或过程完成后才进行更新的
----------------------------------------------------------------------






--如下的是计算一个二进制矢量中1的个数的代码:
-------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
-------------------------------------------------
entity jishuqi is
  port (din: in std_logic_vector(7 downto 0);
         ones: out integer range 0 to 8);
end jishuqi;
------------------------------------------------
architecture not_ok of jishuqi is
   signal temp: integer range 0 to 8;--在全局中声明使用
   begin
process(din)
   begin
    temp <= 0;---25和28行都进行了赋值,由于不是立即生效的,当代码执行到28行的时,temp的初值可能是
    for i in 0 to 7 loop--temp所有可能取值的任何一个,导致错误,用变量来记录中间值即可解决问题
   if (din(i) = '1') then 
    temp <= temp+1;
    end if;
  end loop;
  ones <= temp;
end process;
end not_ok;
-----------------------------------------------------
--本题中不使用temp也可以完成设计,因为ones本身就是一个端口,可以直接使用,但必须将ones的端口方向
-- 改为buffer,因为ones需要被赋值并且在内部被调用




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -