2012-04-18 110 views
3

非常基本的问题:VHDL:信号和端口在其上“箭头”的侧=>

如何知道其中端口/信号/值应该被放置在箭头的哪一侧? 我注意到,通过切换 port_a => xx <= port_a看起来非常平等,我得到了一个错误。 另外,x => port_a不工作

我甚至不知道箭头应该指向哪个方向。

答案真的很感激!

回答

5

<=是一项任务 - 特别是一个信号分配,用来自其他地方的值驱动一个信号。对于物理比喻,右边的东西将驱动一个值到左边。

=>是从引脚到信号的端口映射。这不是一项任务 - 物理比喻可能是将一个引脚焊接到电线上。

您只能对实例进行“焊接”,因此=>映射只发生在port map内。在那里,“pins”总是左边(因为这就是语言规则说的),这就是为什么你不能在port map中做x <= port_a

+0

谢谢汤普森先生! – chwi 2012-05-16 07:35:28

2

信号分配从右到左使用<=。 右侧必须是来自实体的输入信号或过程中声明的信号。 左侧可以是实体的输出信号(或输入/缓冲区),过程中声明的信号或过程中声明的变量。

除了在其他答案中提到的端口映射,=>箭头也用于完全不同的事情 - 构建向量。例如,如果v是一个4位向量,则v <= (others => '0')将为v赋值“0000”。圆括号内的“=>”是在向量内不同位置分配不同值的快捷方式。

+0

非常感谢您快速回答(s)! – chwi 2012-04-18 10:00:53

0

if =>是针对端口列表的,那怎么可能?请注意,clk_40Mhz_i是一个引脚。

COMPONENT clk_wiz_v3_5 is 

PORT

( - 时钟在端口

CLK_IN1:在STD_LOGIC;

- 时钟输出端口

CLK_OUT1:出STD_LOGIC;

- - 状态和控制信号

RESET:in std_logic;

LOCKED:out std_logic

);

END COMPONENT;

xclk_wiz_v3_5:clk_wiz_v3_5

PORT MAP(

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);

reset < = not(clk_locked);