作者zxvc (zxvc)
站内Electronics
标题Re: [问题] 怎麽改才不会出现这情况呢?
时间Sat Mar 10 10:17:40 2007
※ 引述《CuckooBoy (阿书)》之铭言:
: http://ilook.tw/79gm
: 程式主要的就是在做.....
: 如水龙头,我用LOAD去.....送出CLK,还是关掉
: 当我2个pulse时就关,多少就开....
: 请教一下
: 波形中出现黄圈的情况
: 我是用POST-PLACE &ROUTE模拟的
: 我知道那是cnt造成
: 我该如何解决 让他平平的
: 程式要怎麽写才不会呢?
: library IEEE;
: use IEEE.STD_LOGIC_1164.ALL;
: use IEEE.STD_LOGIC_ARITH.ALL;
: use IEEE.STD_LOGIC_UNSIGNED.ALL;
: entity MBA is
: Port ( CLK : in std_logic;
: SCLK : out std_logic;
: SDI : out std_logic;
: RCLK : out std_logic;
: OE : out std_logic);
: end MBA;
: architecture Behavioral of MBA is
: signal cnt : std_logic_vector(3 downto 0);
: signal load,sig :std_logic;
: begin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: SCLK <= load and CLK;
: process(CLK)
: begin
: if CLK='1' and CLK'event then
: if cnt<2 then
: load <= '0';
: else
: load <= '1';
: end if;
: end if;
: end process;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这一段改成这样:
process(CLK)
begin
if CLK'event then
if CLK='1' then
if cnt<2 then
load <= '0';
SCLK <= '0';
else
load <= '1';
SCLK <= CLK;
end if;
else
SCLK <= '0';
end if;
end if;
end process;
http://web.cc.ncu.edu.tw/~93501025/vhdl.png
上图中,上面的模拟是你原先的HDL code模拟,
下面的是修改後的模拟.
我这样的写法是避开SCLK是load and CLK.
原先的code之所以会出现一个暂时性的pluse,
是发生在load为1时,CLK正缘出现後,load还未变为0的时後,
load and CLK的结果会为1.
这种暂时性的pluse往往出现在,
两个在某个时间点几乎同时变化的讯号拿来做某logic的输入.
例如:SCLK <= load and CLK;
所以要避开这个问题,就想办法把load与CLK拆开.
(以上是我自己的推论,我是不知道书上有没有写,
是否完全无误我就不清楚了.)
: process(CLK)
: begin
: if CLK='1' and CLK'event then
: if cnt < 9 then
: cnt <= cnt + 1;
: else
: cnt <= "0000";
: end if;
: end if;
: end process;
: end Behavioral;
--
《金刚经》离一切诸相,则名诸佛。
http://web.cc.ncu.edu.tw/~93501025/jg.doc
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.200.121
※ 编辑: zxvc 来自: 122.116.13.117 (02/25 22:06)