VHDL语法

数据类型及使用

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\ 需要加两个反斜杠来界定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

匿名匿名匿名11

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

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

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

打赏作者

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

抵扣说明:

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

余额充值