非常基本的问题:
如何知道端口/信号/值应放在箭头的哪一侧?
我注意到通过切换
port_a => x
到x <= port_a
似乎非常平等,我收到了错误。
此外,x => port_a
无效
我甚至不知道箭头指向哪个方向。
非常感谢答案!
答案 0 :(得分:5)
<=
是一项任务 - 特别是一项信号分配,用来自其他地方的值驱动信号。对于物理类比,右侧的东西将值驱动到左侧。
=>
是从引脚到信号的端口映射。这不是一项任务 - 物理类比可能是将引脚焊接到电线上。
您只能对实例化进行“焊接”,因此=>
映射仅发生在port map
内。在那里,“pins”总是在左侧(因为这是语言规则所说的),这就是为什么你不能在x <= port_a
中进行port map
。< / p>
答案 1 :(得分:2)
使用<=
从右到左进行信号分配。
右侧必须是来自实体的输入信号或过程中声明的信号。
左侧可以是实体的输出信号(或输入/缓冲区),过程中声明的信号或过程中声明的变量。
除了在其他答案中提到的端口映射之外,=>
箭头也用于完全不同的东西 - 构造向量。
例如,如果v是4位向量,则v <= (others => '0')
将“0000”分配给v。括号内的“=>”是用于在向量内的不同位置分配不同值的快捷方式。 / p>
答案 2 :(得分:0)
if =&gt;是一个端口列表,那么这怎么可能?请注意,clk_40Mhz_i是一个引脚。
COMPONENT clk_wiz_v3_5 is
PORT
( - 端口时钟
CLK_IN1:在std_logic中;
- 时钟输出端口
CLK_OUT1:输出std_logic;
- 状态和控制信号
重置:在std_logic;
已锁定:输出std_logic
);
END COMPONENT;
xclk_wiz_v3_5:clk_wiz_v3_5
港口地图(
CLK_IN1 => clk_40Mhz_i,
-- Clock out ports
CLK_OUT1 => clk_40Mhz,
-- Status and control signals
RESET => pic_fpga_reset,
LOCKED => clk_locked
);
pic_fpga_reset&lt; = not(processor_fpga_resetn_i);
重置&lt; = not(clk_locked);