VHDL中有哪些非常有用但深奥的语言功能......
用户定义的物理类型,如"角度","电压","temperature_coefficient",然后您可以在其中写下像temp <= 45 deg;
或volt <= 3.3 V;
.
有时,有不止一种方法可以做某事.好的,大多数时候,你可以用VHDL的方式做很多事情.根据另一个信号的值,查看要为信号指定不同值的情况.
选定的信号分配
最具体的方法是选择信号分配.基于几个可能的值b
,您可以为其指定值a
.这里的代码没有冗余.
with a select b <=
"1000" when "00",
"0100" when "01",
"0010" when "10",
"0001" when "11";
Run Code Online (Sandbox Code Playgroud)
条件信号分配
条件信号分配的构造更为通用.对于每个选项,您必须提供条件.这意味着您可以将任何布尔表达式作为条件编写,这比相等检查更自由.虽然这种结构可以为您提供更多自由,但也有更多的冗余.我们必须a =
在每一行写相等检查().如果您使用长名称的信号,这将使您的代码更笨重.此外,在所选信号分配中使用的分隔符是逗号.在条件信号分配中,您需要else
关键字.更多代码用于相同的功能.
b <= "1000" when a = "00" else
"1000" when a = "01" else
"1000" when a = "10" else
"1000" when a = "11";
Run Code Online (Sandbox Code Playgroud)
与案例陈述的组合过程
最普遍可用的构造是一个过程.在此过程中,您可以编写case语句或if语句的级联.这里有更多的冗余.您是进程的骨架代码(开始,结束)和敏感性列表.这不是一个很大的努力,但是当我起草这个时,我已经放入b
了灵敏度列表而不是a
.容易犯一个小错误.您还需要指定other
案例中发生的情况.
process(a)
begin
case a is
when "00" => b <= "1000";
when "01" => b <= "0100";
when "10" => b <= "0010";
when "11" => b <= "0001";
when others => assert "unreachable" severity failure;
end case;
end process;
Run Code Online (Sandbox Code Playgroud)
虽然最后一个代码片段是最大的,也许最容易出错,但它可能也是最常见的.它使用两个熟悉且经常使用的结构:进程和case语句.
选定和条件信号分配的问题在于它们的语法中没有系统.意思几乎相同,但语法不同,足以让你失望.我知道很多工程师永久都会在他们的办公桌上放一份Doulos Golden Reference Guide to VHDL.这对Doulos来说是好事,因为他们的名字一直被提到.
VHDL的最佳特性 - 它用于设计和实现硬件.:)
能够拥有单个界面的多种不同实现(体系结构),并轻松交换它们.
与C++中的OOP相同:您可以定义一个接口和许多实现.在VHDL中为同一设备创建仿真和综合模型非常有用.
语言模型固有的低开销并行性.它让我想起了数据流语言.
实际上,有C++的SystemC库实现了并行执行语义.您可以轻松下载并试用:http://www.systemc.org.我正在研究C++ - 到RTL的综合.所以我希望在4 - 5年内,所有硬件开发都将使用SystemC和C++完成.