微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > signal nq1 : inout std_logic;可以这样定义吗? (无内容)

signal nq1 : inout std_logic;可以这样定义吗? (无内容)

时间:10-02 整理:3721RD 点击:

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
signal  nq1 : inout std_logic;
vhdl不太熟,好像不可以
编译时没有语法错误吗?

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
呵呵,有啊!可我不知道怎么办才好,最后两种错误时钟消不掉!我想了好多法子了,请再指点一下,好吗?谢谢
topld:  cpld.vhd:  (E463) 'q2' -- Can't handle registered multi driver.
topld:  cpld.vhd:  (E463) 'nq1' -- Can't handle registered multi driver.
topld:  cpld.vhd:  (E446) Can't handle multiple drivers for 'q2' in selected device.
topld:  cpld.vhd:  (E446) Can't handle multiple drivers for 'nq1' in selected device.

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
signal nq1: std_logic;
信号是内部的东西,不应该有inout

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
为什么要这样写呢?你想实现什么功能?

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
内部信号不用指明它的方向的,只要指明它的逻辑就行了!

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
对,不用加inout

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
还是想实现产生一个时钟周期的同步幀头,因为前面一直没整通,所以才会无休无止在这儿纠缠,请各位不要介意!谢谢
另外,我知道 work.rtlpkg.all;中有DFF,不过只是最基本的dff,而我要用带复位的dff。还有我用q2既做输出又做输入,是想用q2控制nq1的值,让nq1正好能晚q2一个值时钟周期,其后两者相与为低电平,从而完成一个时钟周期的同步幀头的产生。感觉下面程序好像走得通,可没法解决上面出现的问题,还请多帮忙!
library ieee;
use ieee.std_logic_1164.all;
use work.cfq_pkg.all;
......
architecture archcpld of cpld is
signal  nq1 :  std_logic;
signal  q2 :  std_logic;
signal  nrclk : std_logic ;
signal counter :  std_logic_vector(2 downto 0);
begin
----------------------------------------------
----------------------------------------------
--produce T_FRAME_HEADER
----------------------------------------------
----------------------------------------------
bin_1: cfq
port map( d => q2,
nreset => lxt_ten,
clk => tclk,
       nq => nq1 );
bin_2: cfq
port map( d => bdx1,
nreset => lxt_ten,
clk => tclk,
           q => q2 );
T_FRAME_HEADER<= '1' when (( nq1 = '1') and (q2 = '1'))
else '0';
----------------------------------------------
----------------------------------------------
--produce R_FRAME_HEADER
----------------------------------------------
----------------------------------------------
nbio <= lxt_cd ;
nrclk <= (not rclk)  ;
bin_3:  cfq
port map( d => q2,
nreset => lxt_cd,
clk =>  nrclk,
nq => nq1 );
bin_4: cfq
port map(d => bclkx1,
nreset => lxt_cd,
clk =>  nrclk,
q => q2 );
R_FRAME_HEADER<= '1' when ((nq1 = '1') and (q2 = '1'))
else '0';

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
你为什么不肯试试我给你的那个程序呢?我敢保证绝对实现你的功能。

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
我昨天用了,不过我觉得q1<=q2;那么q2与q1之间没有一个时钟的延迟,也不可能产生一个时钟周期的同步幀头?这样的同步幀头输出信号能与dsp的同步幀头信号相连吗?dsp的同步幀头信号只有一个时钟周期的!
-- 试试用这个吧。nset的那个脚就不接就行了。
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity frame_header is
port
(
tclk:in std_logic;
lxt_ten:in std_logic;
bdxl:in std_logic;
t_frame_headerut std_logic
);
end frame_header;
architecture behave of frame_header is
signal q1:std_logic;
signal q2:std_logic;
begin
t_frame_header<= q2 and (not q1);
process(tclk,lxt_ten)
begin
if lxt_ten='0' then
  q1<='0';
  q2<='0';
elsif tclk'event and tclk='1' then
  q2<=bdxl;
  q1<=q2;
end if;
end process;
end behave;

q1<=q2;就是延时一个时钟的意思,你可以试试。

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
谢谢谢谢

signal nq1 : inout std_logic;可以这样定义吗? (无内容)
前面出的错误,我已经知道了,我把产生接收同步幀头的q2,q1改成q4,q3,编译就通过了。我不该重复用了q2和q1。谢谢大家的指点!

学习!

signal是模块内部信号,相当于verilog中的reg型,输出信号如果定义成buffer可以当作signal在程序中使用,反过来就不可以,所以inout就是inout,前面又定义个signal就很莫名其妙了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top