非常基本的问题:
我怎么知道端口/信号/值应该放在箭头的哪一侧?我注意到通过切换
port_a => x
到x <= port_a
看起来非常相等的,我得到了一个错误。另外,x => port_a
不要工作
我什至不知道箭头应该指向哪个方向。
答案非常感谢!
<=
是一个赋值 - 特别是一个信号赋值,从其他地方驱动一个带有值的信号。对于物理类比,右侧的事物将值驱动到左侧。
=>
是从引脚到信号的端口映射。这不是一项任务——物理类比可能是将引脚焊接到电线上。
您只能对实例进行“焊接”,因此=>
映射只发生在port map
. 在那里,“pin”总是在左边(因为这是语言规则所说的),这就是为什么你不能x <= port_a
在port map
.
信号分配从右到左使用<=
. 右侧必须是来自实体的输入信号或在进程中声明的信号。左侧可以是来自实体的输出信号(或输入/缓冲区)、进程中声明的信号或进程中声明的变量。
除了其他答案中提到的端口映射之外,=>
箭头还用于完全不同的事情 - 构造向量。例如,如果 v 是 4 位向量,v <= (others => '0')
则将“0000”分配给 v。括号内的 ``=>` 是在向量内不同位置分配不同值的快捷方式。
如果 => 用于端口列表,那么这怎么可能?请注意,clk_40Mhz_i 是一个引脚。
COMPONENT clk_wiz_v3_5 is
港口
(-- 端口时钟
CLK_IN1:在标准逻辑中;
-- 时钟输出端口
CLK_OUT1:输出标准逻辑;
-- 状态和控制信号
重置:在 std_logic 中;
锁定:出标准逻辑
);
结束组件;
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 <= not(processor_fpga_resetn_i);
重置 <= 不(clk_locked);