<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 5427|回復: 10
    打印 上一主題 下一主題

    [提問] 計數計數模塊設計遇到的問題

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2012-6-13 08:19:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: 計數
    我正在用CPLD設計一個計時計數模塊:按下reset清零,按一下start開始計時,按一下stop停止計時把結果傳給單片機,現在就是控制不了stop,就是仿真時start為高電平1時計數器工作,為0時停止計數,stop控制不了,請問應該怎樣才能控制呢
    沙發
    發表于 2012-6-13 11:05:24 | 只看該作者
    最好不用電平控制,而用沿控制!檢測start,stop的沿!
    板凳
     樓主| 發表于 2012-6-13 15:02:48 | 只看該作者
    但是在一個進程中好像不能有超過兩個以上的邊沿檢測
    地板
    發表于 2012-6-13 15:37:25 | 只看該作者
    最好不用電平控制,而用沿控制!檢測start,stop的沿!
    汽車電子
    地下室
     樓主| 發表于 2012-6-14 10:19:43 | 只看該作者
    程序是
    entity count  is
       port(
                clk,start,stop,reset : in std_logic;
                 cout ut  std_logic_vector(7 downto 0)
              );
    end count;
    architecture behav of count
    begin
    process(clk,start,stop,reset)
      variable c : std_logic_vector(7 downto 0);
    begin
    if reset='1' then
    c:="00000000";
    if clk'event and clk='1'  then
    if start'event and start='1'  then
    c:=c+1
    elsif stop'event and stop='1'  then
    cout<=c;
    end if;
    end if;
    cout<=c;
    end process;
    end behav
    編譯后出現錯誤:can't infer register for "c[0]" at count.vhd,because it does not hold its value outside the clock edge
    6
    發表于 2012-6-14 16:33:11 | 只看該作者
    回復5樓woshaogang123

    你不能這樣檢測沿,用兩個D觸發器緩存,當前一個信號為高,后一個信號為低的時候就是下降沿到來了!
    7
     樓主| 發表于 2012-6-15 09:50:14 | 只看該作者
    我做的是一個激光測距儀,用CPLD作時間間隔測量,就是測量激光從發射出去到碰到目標反射回來的時間,start是一PWM信號,作啟動計數器的開門信號.stop就是回波信號,作關閉計數器的關門信號,我的思路是檢測start信號的第一個上升沿作開門信號,stop的第一個上升沿作關門信號
    8
    發表于 2012-6-15 11:59:18 | 只看該作者
    回復7樓woshaogang123

    這很簡單!你先搞清楚怎么檢測信號的上升沿吧,用一個參考時鐘加兩個D觸發器就可以了!
    9
     樓主| 發表于 2012-6-15 14:14:52 | 只看該作者
    還是不明白,兩個D觸發器怎么用啊,能舉個例子嗎
    10
    發表于 2012-6-17 06:00:03 | 只看該作者
    主要的問題不在于是電平觸發還是邊沿觸發,問題是按鍵的動作會引起觸點一連串的電平跳變。按一次機械觸點,跳變大約持續十幾毫秒時間,相當于許多個隨機的高低電平或上下邊沿的變化。在一次按動中,是無法確定最后一次被取到的是高還是低、上沿還是下沿。特別是對CPLD等高速邏輯電路,要真正處理掉這一問題,就要采取延時加多點采樣判別技術,來消除手動啟?刂频臏蚀_性問題。
    11
    發表于 2012-7-8 09:52:05 | 只看該作者
    同意10樓意見,此類現象在別的場合也經常遇到。
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷