📄 jishuqi.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 + -