CPLD的IO口怎么互相赋值?
CPLD的IO口怎么互相赋值?设置IO1,IO3为输出,IO2,IO4为输入
比如说要把IO1的值赋给IO2,IO3的值赋给IO4,应该怎么做?
是设定一个信号,在进程里把IO1,IO3的值先赋给信号,然后再把信号的值赋给IO2,IO4吗?
这样的话,应该会有延时吧,如果设置一个变量的话,我实验过了,也不行
代码如下
PROCESS(CLK)
VARIABLE k: std_logic_vector(1 downto 0);
BEGIN
IF (CLK'event and CLK='1') THEN
k(0):=IO1;
k(1):=IO3;
IO2<=k(0);
IO4<=k(1);
END IF;
END PROCESS; 这是个基本知识:输出信号是不能作为输入用的,即不能向其它信号赋值;输入信号是不能作为输出用的,即不能接受其它信号的赋值。<br>
要想将输出信号反馈回来也很简单,只要将要输出的信号用一个signal保存,由这个signal输出到IO1和IO3,内部直接取用这个signal就可以了。或者由外部电路来短接这些端口,内部就不用管了。 我就是这么做的啊<br>
下把输出信号IO1,IO3输出给signal保存,然后把signal输出给IO2,IO4 关注中!!! 如果真是那样做的还不行就奇怪了哈 PROCESS(CLK)<br>
signal IO1_t,IO3_t: std_logic;<br>
BEGIN <br>
IO1<=IO1_t;<br>
IO3<=IO3_t;<br>
......<br>
IO1_t,IO3_t 就是楼主想要输出的东东了,在程序任何地方都可以访问生成的输出信号***_t 了<br>
IO2, IO4是别人给的输入怎么能赋值呢,楼主只要用的权力,没有赋的权利啊,呵呵.<br>
假设能赋:别人给1你给0那不是那不是电流超大,楼主心痛的片子就生烟了或爆炸了,呵呵...... 楼上更正:<br>
architecture ......<br>
IO1<=IO1_t;<br>
IO3<=IO3_t;<br>
process<br>
begin<br>
......<br>
end process;<br>
end arch_...... 原帖由 FerrariTim 于 2007-1-29 11:20 发表<br>
我就是这么做的啊<br>
下把输出信号IO1,IO3输出给signal保存,然后把signal输出给IO2,IO4 你用的是变量保存输入值<br>
而变量是即时改变;<br>
虽然也用时钟沿打了一下<br>
但还是被VHDL语法禁止了 你还是没有理解我的意思,7楼说的是正解。 搂主时把输出口当输入口把输入口当输出口了<br>
<br>
搂住要仔细想想,既然IO1,IO3为输出口,那么它们必须首先从内部signal(A)获得数据再输出,<br>
IO2,IO4为输入口,那么必须从外部接受数据,再传给内部signal(B),<br>
<br>
搂主要把IO3赋值给IO4这样显然时部行的,可行的办法时 signal(A)赋值给signal(B)<br>
<br>
不知道我的解释是否准确??