2014-04-09 64 views
-1

在监控相同引脚的值之后,是否可以将inout引脚设置为特定值?如果我们有一个inout信号,那么如果该信号的值为1,那么在完成特定的操作后,我们可以将该引脚的值设置为vhdl中的零。通过监控VHDL中的相同引脚设置引脚值

+0

解释你想做什么以及你尝试过什么? –

+0

我必须实现一个移位寄存器,它有一个异步信号负载inout。当它的值是1时,我必须加载数据,当它的值为零时,我们必须在加载数据之后移动数据.so信号必须为零。即在负载发生'1'后,我们必须将该值更改为0。 – user3378616

回答

0

您所描述的内容没有多大意义。你确定你正确理解了这些要求吗?

您的load信号听起来像是一个外部控制信号,它是模块的输入。你不应该试图改变那个信号的值 - 谁来控制你的模块应该这样做。

只要load信号被断言(1),你应该跟据推测被设置在不同的输入信号的任何值加载你的移位寄存器(例如,parallel_data)。当load信号被外部逻辑取消断言(0)时,您应该可能开始将每个时钟周期的加载数据的一位移出到您的输出信号(例如,serial_data)。

请注意,不需要双向信号!

这是基于我认为典型的移位寄存器行为,可能会或可能不会匹配你想要实现的。

0

这听起来不像是一个很好的计划,我不是很确定你想这样做,但我想如果你可以做一些事情,使得:

  • 你有电阻上拉电线落地。
  • 您的外线设备驱动线高
  • 的FPGA捕捉引脚变为高电平,然后也推动它高,一旦它已经看到了销去高
  • 的FPGA可以再设置
  • 外部源进入三态引脚三态时,它要标志,它已经完成(或其他),和电阻会拉为低电平再次
  • 重复

我想象一个使用了这将是外部设备触发一些处理和FPGA指示何时已完成,在这种情况下,FPGA代码可以是这样的:

pin_name <= '1' when fpga_is_processing = '1' else 'Z'; 
start_processing <= '1' when pin_name = '1' and pin_name_last = '0'; 
pin_name_last <= pin_name when rising_edge(clk); 

start processing会产生对pin_name信号的上升沿单个时钟脉冲。 fpga_is_processing将作为处理模块的输出,在外部设备停止将引脚驱动为高电平之前,该输出必须“返回”。

可能想“降噪”关于pin_name信号边缘检测器,以减少外部毛刺触发您处理的机会。还有各种方法可以实现这一点。