原创 1:1占空比的3分频的编写

2007-12-26 22:06 3845 6 10 分类: FPGA/CPLD

         
难度蛮大的奥。编写中。。。。


搞定一个版本的(原创):用6个(外加一个)实现,3个用上升沿,3个用下降沿触发(VHDL是通过反相clk,然后上升沿有效)开始赋值“001100”(不能用“000100”)然后每个clk的跳变沿循环左移一位。3个时钟周期循环左移6次,每移三次,clk1_3反相。从而得到。但是中间由于存在组合逻辑,故占空比不能达到严格的1:1.布线FPGAxilinx器件,仿真结果15.8:14.2(周期10ns)还是有一定差距的。


f5cdc053-f143-4ddc-b3b7-d612484c5e1b.jpg


entity fre_div is
    Port ( clk : in  STD_LOGIC;
           rst : in  STD_LOGIC;
     q0_o,q1_o,q2_o,q3_o,q4_o,q5_o :out std_logic;
     clk180_o: out std_logic;
     change3_2_o: out std_logic;
           clk1_3 : out  STD_LOGIC);
end fre_div;


architecture Behavioral of fre_div is
signal d0,d1,d2,d3,d4,d5 :std_logic;
signal q0,q1,q2,q3,q4,q5 :std_logic;
signal change3_2,clk0,clk180:std_logic;
begin
clk180<= not clk0;
clk0<=clk;
q0_o<=q0;
q1_o<=q1;
q2_o<=q2;
q3_o<=q3;
q4_o<=q4;
q5_o<=q5;
clk180_o<=clk180;
change3_2_o<=change3_2;
 
process(rst,q0,q1,q2,q3,q4,q5)
begin
    if rst='1' then
     d0<='0';
   d1<='0';
   d2<='1';
   d3<='1';
   d4<='0';
   d5<='0';
  else
    d0<=q5;
  d1<=q0;
  d2<=q1;
  d3<=q2;
  d4<=q3;
  d5<=q4;
  end if;
end process;


process(clk0)
begin
 if (clk0'event and clk0='1')  then 
     q0<=d0;
   q2<=d2;
   q4<=d4;


end if;
end process; 


process(clk180)
begin
 if (clk180'event and clk180='1') then
   q1<=d1;
   q3<=d3;
   q5<=d5;
 end if;
end process;


change3_2<=(( d5) and (not d4) and (not d3) and (not d2) and (not d1) and ( d0))
 or ((not d5) and (not d4) and ( d3) and ( d2) and (not d1) and (not d0));


process(change3_2)
begin
   if (change3_2'event and change3_2='1') then
   clk1_3<= not clk1_3;
  end if;
end process;


end Behavioral;


改进措施:在synplify中加入retiming选项,效果明显好转。15.1:14.9(布局布线原因很大)


仿真结果:


adc80cdc-c47f-401b-9650-26996d2b7347.jpg


欢迎切磋!


感谢ostrich1983 的补充,他的方案,跟家的简洁,易懂。自己的是从数字电路设计的角度编写的。而ostrich1983 的方案设计的层次更高,,仿真了下,占空比基本上也是14.9:15.1。


下面是ostrich1983 方案的综合:


c900608b-78ca-4165-9f5c-f2a97d2a1e61.jpg

文章评论4条评论)

登录后参与讨论

tengjingshu_112148725 2009-1-11 21:23

你的东西很好,不过你的东西没分类啊,搞得我想找FPGA的东西都不知道怎么找。 我的BLOG地址:www.ednchina.com/blog/tengjingshu 大家多多交流:)

用户502718 2007-12-28 17:33

module div3(clkin,clkout);
 input clkin;
 output clkout;
 reg clkout,clkouta,clkoutb;
 reg [1:0]m,n;

always@(posedge clkin)
begin
 case(m)
  0:begin clkouta<=0;m<=m+1'b1;end
  1:begin clkouta<=0;m<=m+1'b1;end
  2:begin clkouta<=1;m<=0;end
 endcase
end

always@(negedge clkin)
begin
 case(n)
  0:begin clkoutb<=0;n<=n+1'b1;end
  1:begin clkoutb<=0;n<=n+1'b1;end
  2:begin clkoutb<=1;n<=0;end
 endcase
end

always@(clkouta,clkoutb)
begin
 clkout=clkouta|clkoutb;
end
endmodule

 

用户1393038 2007-12-27 15:00

不好意思

刚写好

用户42640 2007-12-26 22:33

晕,被骗了,呵呵
相关推荐阅读
用户1393038 2008-08-12 23:03
通信有效性与可靠性
 通信质量概述    影响通信质量的因素可分为两个方面。一是前面已经介绍过的广义信道的特征及种种限制因素,二是表示信息本身的信号或编码方式和传输(调制解调)方式。    有效性与可靠性是相辅相承的两个...
用户1393038 2008-07-10 15:34
如何退出RedHatLinux的X-window状态?
如果你想开机启动直接进入文字请按照如下配置:编辑 /etc/inittab 文件 ,把下面这行id:5:initdefault:里面的5改成3就行了反之若是想从文字下直接进入x请输入命令startx如...
用户1393038 2008-07-10 14:43
VMware中用NAT方式实现FreeBsd/Linux上网 (这个没试过,不知行不?)
 我用的是VMware版本是 5.5.3,host机器运行的是windows Xp professional 。1、安装VMware workstation2、安装guest系统,这里我安装的Red ...
用户1393038 2008-07-10 14:42
VMware中用host only 方式实现FreeBsd/Linux上网
到windows XP 中,查看所有的网络连接,你应该发现除了原有的网卡之外,又多了Vmnet1和Vmnet8。如果你看了一下说明书应该知道,vmnet1是hostonly的接口,而Vmnet8是使用...
用户1393038 2008-07-10 11:34
vmware linux共享windowsxp下的文件
为了更好的解决虚拟机与主机的共享问题,VMware公司有一个VMWare-tools,来实现文件共享。这里主要讲的是在Windows下用Vmware虚拟Linux来与windows来共享。至于Wind...
用户1393038 2008-07-09 14:47
vmware虚拟机上的linux加载u盘的方法(用过没问题,很好)(转)
在使用中需要和宿主系统WindowsXP交换信息。除了配置共享文件夹外,还可以使用U盘。Step 1. 需要让你的虚拟机Guest OS(Linux)能自动识别U盘。方法如下:保持焦点在Linux上,...
我要评论
4
6
关闭 站长推荐上一条 /2 下一条