数据类型及使用
在 process
中经常会使用到各种类型,这里记录一下使用过的类型,以供下次使用参考
常量
CONSTANT PI: REAL:= 3.1416;
赋值
Q := (others => '0')
省略赋值操作符
等效于给变量Q赋值"00000000"
- 如何把
std_logic_vector
中的某一位赋给std_logic
d_out: out std_logic_vector(3 downto 0);
c_out: out std_logic;
variable result: std_logic_vector(4 downto 0);
// 截取向量中的某一段
d_out <= result(3 downto 0);
// 抽取向量中的某一位
c_out <= result(4);
- 位如何赋值,向量如何赋值,单引号还是双引号
单个字符使用
''
,多个字符使用""
条件语句
if
else
语句怎么写
if(clear = '0') then
q <= '0';
elsif(clk_event and clk='1') then
q <= d;
else
null;
end if
注意
else
后面不加then
,只有if
elsif
加
选择语句
case语句
case d is
when "00" => c <= '0';
when "01" => c <= '0';xxx;xxxx;
when "10" => c <= '0';
when others => null;
end case
需要注意:
1.case的条件必须不能重合且能覆盖所有的条件,即交集为空且并集为全集
2.每个条件后面可以有多个语句。
元件例化
元件声明
声明之前,先把将要使用的元件的文件路径导入到工程中,以供编译时索引。在结构体内的 begin
前面加入元件声明 component
,注意元件的名称是对应vhdl中的实体名,元件引脚的名称要与实体中的 port
一致。
architecture behave of counter100 is
component freq_divider
port(
clk_in: in std_logic;
clk_out: out std_logic);
end component;
begin
元件例化
在结构体的 begin
之后调用元件
architecture xxxx
xxxx
begin
U1: freq_divider
port map(
clk_in => xxx;
clk_out => xxx);
U2: freq_divider(
clk_in => xxx;
clk_out => xxx);
xxxx
1.U1
U2
是例化后元件的标识,是自定义的,不能重复。标识后面是声明的元件的名称,必须和声明一致,声明的元件可以例化多个元件,标识需要定义成不同的。
2. 端口映射使用 port map
,可以位置映射也可以名称映射。
其他
1.关键词问题
使用关键词做芯片名芯片管脚命名时 \out\
需要加两个反斜杠来界定。