作者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)
1F:推 CuckooBoy:你有模拟过吗?这样写..CPLD应该还是会相位差吧? XD 10/07 15:26
2F:推 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
3F:→ deathcustom:以一个4MHz clk来作的话误差应该在2ns以下吧 10/07 15:49
4F:→ deathcustom:而且这种误差是电路本身类比上的误差 10/07 15:52