Generics 在VHDL中定义等价物是什么
VHDL中#define、#ifdef和#ifndef的等价物是什么 我想使用泛型作为定义,并根据它们更改设计。举个简单的例子:定义一个字符串泛型,并使用它来确定时钟是单时钟还是差分时钟Generics 在VHDL中定义等价物是什么,generics,vhdl,Generics,Vhdl,VHDL中#define、#ifdef和#ifndef的等价物是什么 我想使用泛型作为定义,并根据它们更改设计。举个简单的例子:定义一个字符串泛型,并使用它来确定时钟是单时钟还是差分时钟 generic ( something : boolean := FALSE; CLK_MODE : string := "SINGLE_ENDED" ); 现在,如何根据泛型更改逻辑?当然,我们可以用一个简单的if语句编写两个可能的逻辑描述,但是这两个描述都将被合成(尽管实际上只使用了一个) 此外,
generic (
something : boolean := FALSE;
CLK_MODE : string := "SINGLE_ENDED"
);
现在,如何根据泛型更改逻辑?当然,我们可以用一个简单的if语句编写两个可能的逻辑描述,但是这两个描述都将被合成(尽管实际上只使用了一个)
此外,是否可以根据通用标准更改端口?对于CLK示例,差分时钟需要2个in端口,但单端时钟只需要一个in端口。如何根据通用端口启用或禁用第二个端口?根据条件合成不同硬件电路的一种方法是使用带有
if generate
语句的通用端口。在下面的示例中,当通用的算术运算\u为\u ADD
为true时,将生成一个加法器。如果为false,则生成减法器
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity conditional_hardware is
generic (
ARITHMETIC_OPERATION_IS_ADD: boolean := true
);
port (
a, b: in unsigned(7 downto 0);
y: out unsigned(7 downto 0)
);
end;
architecture example of conditional_hardware is
begin
adder: if ARITHMETIC_OPERATION_IS_ADD generate
y <= a + b;
end generate;
subtractor: if not ARITHMETIC_OPERATION_IS_ADD generate
y <= a - b;
end generate;
end;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体条件硬件是
一般的(
算术运算为加:布尔:=真
);
港口(
a、 b:无符号(7到0);
y:输出未签名(7到0)
);
结束;
条件_硬件的架构示例如下
开始
加法器:如果算术运算为加法生成
y“关”,
弱上拉电阻=>“关闭”
)港口地图(
i=>,,
ibar=>,,
o=>
);
时钟
我会避免在内部HDL中使用单端时钟信号以外的任何东西
在顶层,实例化差分对缓冲区(Xilinx land中的IBUFDS),将其转换为内部时钟信号,然后在整个过程中使用该信号
港口
无法基于通用端口更改端口管脚的数量。您可以做的是为可选输入指定一个默认值,这意味着您不必在实例化实体时将其连接起来。您可以使用泛型来决定是否使用该信号
generic (
something : boolean := FALSE
);
port (
some_normal_port : std_logic;
some_optional_port : std_logic := 'U';
....
然后
if something generate
some logic using the optional port
else
some logic not using the optional port
end generate;
港口呢?它们可以根据泛型进行更改吗?根据您想要完成的任务,您可以创建一个顶级实体,该实体将所有管脚作为端口。然后使用if-generates只连接实际使用的那些。
generic (
something : boolean := FALSE
);
port (
some_normal_port : std_logic;
some_optional_port : std_logic := 'U';
....
if something generate
some logic using the optional port
else
some logic not using the optional port
end generate;