作者deathcustom (DSM......)
站內Electronics
標題Re: [問題] CPLD是不是很難產生
時間Sun Oct 7 15:48:02 2007
※ 引述《deathcustom (DSM......)》之銘言:
※ 引述《CuckooBoy (書仔)》之銘言:
: ※ 引述《CuckooBoy (書仔)》之銘言:
: : CPLD的架構與FPGA不一樣,所以有些寫法,合成出來的電路也會跟FPGA不一樣
: : 感覺....就算是刻波型,吃同一個CLOCK.....的計數器去用查表..跑pattern波型
: : 出來的結果,把......模擬波型放大.....都會有幾ns的相位差
: : 難到沒辦法完全沒有相位差嗎?
: : 如 a: 10
: : b: 110000000000110000000000...
: : rising_edge(clock)
: : cnt1=cnt1+1;
: : ...
: : rising_edge(clock)
: : cnt2=cnt2+1;
: : ...
: : x=a(cnt1);
: : y=b(cnt2);
: : 結果發現...x和y有少許的ns的相位差.
: : 因為
: : a跟b去做一些and/or運算跟xy有相位差的and/or 出來會結果不一樣
: : 所以我一定要得到一個沒有相位差的xy
: : 但cpld好像很難產生的感覺
: : 合成的數位電路彼此走線會產生DELAY
: : 使得.....輸出的訊號也會有DELAY.....?我能里解..
: : 可是產生一個同步(同時送出)......不就很難了?
: : 特別是CPLD....,FPGA好像比較沒有這樣的DELAY現象!
: 我說明白一點好了
: 有兩個輸出訊號,稱C(CLOCK)/D(DATA)
: 輸出結果 希望C的負緣 落在 D 週期的50%,如下圖
: ---- ----
: C │ ↓__│ ↓___ ....
: --------
: D │ │_______ ....
: DATA1 DATA2
: 因為C有一段訊號要與D一起PULL LOW...
: 所以沒辦法 C<=CLOCK;
: 另外,如果是這樣寫...又會有相位差.....真不知道該怎麼寫才不會有...
: if rising_edge(clock) then //除2
: if (pulllow = 0) then Creg <=not Creg else Creg<=0 end if;
: end if;
: C<=Creg;
: if rising_edge(clock) then //除4
: if (cnt1 < 2) then
: cnt1<=cnt1+1;
: clky <=1;
: elsif (cnt2 < 4) then
: cnt1<=cnt1+1;
: clky=0;
: else
: cnt1<=0;
: clky=0;
: end if;
: end if;
: if rising_edge(clky) then //除4的clky再去觸發計數
: if cnt < 10 then
: cnt <=cnt+1;
: else
: cnt <=0;
: end if;
: end if;
: D<= Dreg(cnt);
module MOD(C,D,clk,PDS);
input clk,PDS;
output C, D;
reg C, D;
always @(posedge clk)
begin
if PDS
C <= ~C;
if ~C
D <= ~D;
end
else
C <= 1'b0;
D <= 1'b0;
end
endmodule
這樣跑跑看吧
不過我C跟D沒有先assign XD
自己去加吧
--
╭ █◣◢█ ╮ ╭ ███◣╮ ╭═══╮ ╭═════╮ ╭═════╮
║ ████ ╰══╯ █ ◥█╰══╯◢ ☆ ╰═╯ ◢▌ ◢╰══╯ ║
║ ████ ◢◢◣ █◣ █ ◢█◣ █ ◢ ◢█◣ ██◣ █ ◢█◣ ╴ ║
˙ █◥◤█ █◤ ███◤ █◢◤ █ █ █◢█ █▌█ █ █◢◤☆  ̄ρ▄
║
║ ◥ ◤ █ ● █◥█◣ ◥█◤ █ ◤ ◥◤◥ ◥█◤ █ ◥█◤ ╰〈╭▄﹀║
╰New York Yankees═ ◤ ════ #40 ◤ Chien-Ming Wang═◤═══ψTheAnswer3╯
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.83.97
※ 編輯: deathcustom 來自: 220.135.83.97 (10/07 14:23)
推 CuckooBoy:你有模擬過嗎?這樣寫..CPLD應該還是會相位差吧? XD 10/07 15:26
推 CuckooBoy:你可能會錯意了 10/07 15:38
你不是要這樣嗎?
┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐
clk ┘ └──┘ └──┘ └──┘ └──┘ └──┘
╭─────┐ ╭─────┐ ╭─────┐
C ─┘ ╰─────┘ ╰─────┘ ╰
╭───────────┐ ╭──────
D ─┘ ╰───────────┘
1.這裡 C = 0, 所以接下來會把 C 拉到 1, D 拉到 1
2. 這裡 C = 1, 所以接下來會把 C 拉到 0, D不動
這裡 C = 0, 所以重複 1 的動作
--
╭ █◣◢█ ╮ ╭ ███◣╮ ╭═══╮ ╭═════╮ ╭═════╮
║ ████ ╰══╯ █ ◥█╰══╯◢ ☆ ╰═╯ ◢▌ ◢╰══╯ ║
║ ████ ◢◢◣ █◣ █ ◢█◣ █ ◢ ◢█◣ ██◣ █ ◢█◣ ╴ ║
˙ █◥◤█ █◤ ███◤ █◢◤ █ █ █◢█ █▌█ █ █◢◤☆  ̄ρ▄
║
║ ◥ ◤ █ ● █◥█◣ ◥█◤ █ ◤ ◥◤◥ ◥█◤ █ ◥█◤ ╰〈╭▄﹀║
╰New York Yankees═ ◤ ════ #40 ◤ Chien-Ming Wang═◤═══ψTheAnswer3╯
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.83.97
→ deathcustom:以一個4MHz clk來作的話誤差應該在2ns以下吧 10/07 15:49
→ deathcustom:而且這種誤差是電路本身類比上的誤差 10/07 15:52