看板 Electronics 關於我們 聯絡資訊
※ 引述《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
zerocustom00:哈~~~懂你意思的人真的是高竿.因為你連問什麼都不知. 10/08 12:28