为使程序结构清晰,具有更好的可读性,提出如下建议:
1)对VHDL语言的保留字,习惯上用大写,其他应小写。但有一种情况需要注意,代表不定状态的“X”和高阻态的“Z”要求必须大写。
2)单词、信号名的含义要明确,命名时不要与保留字相同,以免造成混乱。
3)要求段落分明、含义确切,嵌套关系一目了然。
4)应辅以适量的程序注释。
1.命名规则
所使用的名字,如信号名、实体名、结构体名、变量名、各种进程标记、块标记等进行命名时,应遵守如下规则:
1)名字的最前面应使用英文字母;
2)构成名字的字符只能用英文字母、数字和连字符“-”;
3)不能连续使用“-”,名字的最后一个字符也不能用连字符“-”。
2.注释
1)VHDL语言中使用的注释符是“--”,从注释符号“--”开始到该行末尾结束;
2)所注释的文字不作为语句来处理,不产生硬件电路结构,不描述电路硬件行为;
3)在编译、仿真过程中,对于中文的注释有的软件可能会产生错误。
VHDL设计举例
这一节,举一个8位寄存器的简单VHDL程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY shifter8 IS
PORT(in1,in2:IN STD_LOGIC; --input port
clrn:IN STD_LOGIC; --clear signal
clk:IN STD_LOGIC; --clokck signal
q0,q1,q2,q3,q4,q5,q6,q7:OUT STD_LOGIC);
END shifter8; --output port
ARCHITECTURE rtl Of shifter8 IS
SIGNAL shift_reg:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(clrn,clk)
BEGIN
IF clrn=’0’ THEN
shift_reg <=( OTHERS => ‘0’);
ELSIF clk’s EVENT AND clk=’1’ THEN
shift_reg(7 DOWNTO 1)<= shift_reg(6 DOWNTO 0);
shift_reg(0)<= in1 AND in2;
END IF;
END PROCESS;
q0 <= shift_reg(0);
q1 <= shift_reg(1);
q2 <= shift_reg(2);
q3 <= shift_reg(3);
q4 <= shift_reg(4);
q5 <= shift_reg(5);
q6 <= shift_reg(6);
q7 <= shift_reg(7);
END rtl;