用VHDL中的开关控制不同的时钟

时间:2014-12-15 20:52:24

标签: vhdl clock

如何控制2个不同的时钟?我写了clk1Hz<=newclock or newclock2;所以我可以通过选择其中一个来控制它是&#39; 1&#39;。但是,它在该句子中给出了意外的标识符错误(clk1Hz&lt; = newclock或newclock2;)。我不知道为什么我会有这样的错误。

entity Top_module is
  port(     clk : in std_logic;
    input: in std_logic_vector(2 downto 0);
    reset: in std_logic;
    output: out std_logic_vector(7 downto 0)
  );
end Top_module;

架构Top_module的行为是

component Clockdivider  
    port( clock : in std_logic;
        newclock : out std_logic;--for 1/4sec
        newclock2: out std_logic--for 1/20 sec
    );
end component;

signal state :std_logic_vector(3 downto 0):= "0000";
signal clk1Hz : std_logic;

clk1Hz<=newclock or newclock2;
begin
    comp1: Clockdivider port map(clk, clk1Hz);

    process(clk1Hz,reset)
    begin

      if(rising_edge(clk1Hz)) then
        if newclock='1' then --this is for 1/4 sec option
        ...
        elsif newclock2='1' then
        ...

2 个答案:

答案 0 :(得分:0)

您对clockdivider端口的映射与其声明不对应。它有一个输入和两个输出。端口映射应如下所示:

signal newclock : std_logic;
signal newclock2 : std_logic; 
.......
comp1: Clockdivider port map(clk, newclock, newclock2);

答案 1 :(得分:0)

您的clk1Hz信号在架构头内分配 - &gt;开始后移动它(建筑体)。

但是你的设计存在更严重的问题:

  • OR门不是选择电路,它将是多路复用器。
  • 但是,你不能用正常逻辑复用两个时钟信号。

您使用的是哪个测试平台?
ASIC / FPGA,Xilinx / Altera / ...,Spartan / Virtex /.../ Cyclon / Stratix / ......?

例如:如果您使用的是Xilinx FPGA器件,则应使用BUFGCTRL来切换两个时钟信号。这是一种非常先进的技术,因此我建议您检查您的设计并使用没有时钟多路复用的解决方案:)