最专业的FPGA ZYNQ论坛--黑金动力社区

 找回密码
 注册
查看: 164|回复: 0

关于利用FPGA设计CCD时序的一些问题

[复制链接]
RCY50426 发表于 2019-9-27 09:48:02 | 显示全部楼层 |阅读模式
module TH7888A(clk,rst,L1,L2,R,M,P);
        input clk,rst;                //clk的频率为100MHZ,那么一个电平对应的时间为5ns
        output L1,L2,R;
        output [3:0]M;
        output [3:0]P;
        reg L1,L2,R;
        reg [3:0] M;
        reg [3:0] P;
        reg[15:0] count8jz;
        //reg [2:0] count8jz0;
        reg [3:0] count8jz1;
        // reg[30:0] count;//全局时钟计数器
        reg[3:0] count0;//通过count0的计数调节占空比
        reg[10:0] count1;//通过count1的计数,代表有多少位转移出,其中将水平移位寄区全部转移之后新的一行下移时间算在里面
        reg[10:0] count2;//行转移完成个数计数器器
        //count=0;count0=0;count1=0;count2=0;
//posedge clk or negedge clk 语句本身不合法,因为没有响应的触发器与之对应,所以只能单边沿触发,或者分开写,统一上上升沿触发
ipcore pll_inst(
.areset(!rst),
.inclk0(clk),
.c0(c0),
.c1(c1),
.c2(c2),
.c3(c3),
.locked(locked)
);

wire c0;
wire c1;
wire c2;
wire c3;

always@(posedge c1 or negedge rst)               
begin
        if(!rst)
                begin
                        count0<=1'b1;
                        count1<=1'b1;
                        count2<=1'b1;
                end
        else
                begin
                        if(count0==4'd10)
                                begin
                                        count0<=1'b1;
                                        if(count1==1058+9*2+2)//其中1056为水平移位的像数个数,18为9*T0转化为L所应周期数,T0=100ns,将存储区到水平移位寄存区的时间兑换为多少个L周期的时间,L的周期为50ns
                                                begin                        ////这个地方有1058个像素点,所以修改为1058,两边至少为100ns,现在修改为150ns
                                                        count1<=1'b1;
                                                        if(count2==1056+16)/*count2为行转移次数(1056*800+200+x)/1056*(1058*50+100*9+100)=16通过调节x的值得到16,将光转移的过程利用转移一行的时间进行计数,
                                                        因为在时钟设计图上,最少左右100ns,所以这个地方有调整的余地,通过调整x使得将光转移的过程换算为转移一行时间的整数倍。*/
                                                                count2<=1'b1;
                                                        else
                                                                count2<=count2+1'b1;
                                                end
                                        else
                                        count1<=count1+1'b1;
                                end
                        else
                                count0<=count0+1'b1;
                end
end
//信号的书写       
always@(posedge c1)
begin
        if(count0==6||count0==7)                //当时钟发生翻转时候,会在之前的状态下进行判断,进而在下降沿的作用下,使得进程启动,或者说当时钟翻转时,判断的是当下count0的值
                R<=1'b1;
        else
                R<=1'b0;
end
//L1与L2信号的书写
always@(posedge clk)
begin
        if(count2>1056)
                begin
                        L1<=1'b0;
                        L2<=1'b1;
                end
        else
                begin
                        if(count1>1058)
                                begin
                                        L1<=1'b0;
                                        L2<=1'b1;
                                end
                        else
                                begin
                                        if(count0<=5)
                                                begin
                                                        L1<=1'b1;
                                                        L2<=1'b0;
                                                end
                                        else
                                                begin
                                                        L1<=1'b0;
                                                        L2<=1'b1;
                                                end
                                end
                end               
end








为了产生输出20MHZ的方波信号,或者接近于方波形状的信号,采用锁相环的形式将clk信号倍频至200MHZ,再进行10分频,这样方便调节占空比;
但是测得输出R信号的波形如图:
在图片里面了
示波器的带宽为150MHZ,不太确定是不是示波器的带宽引起的,如果将触发的条件改为posedge clk,不利用锁相环电路的话,用板子的50MHZ晶振作为输入,输出的R频率为5MHZ,此时测得的波形勉强能接受,长这个样子:
放在图片里面了
希望得到好心人的帮助,才刚学,自己很菜,是因为用200MZH,周期为5ns,电路本身来不及建立引起的还是别的原因,希望好心人能指点一下,,




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|@2009-2019 芯驿电子科技(上海)有限公司|小黑屋|手机版|Archiver|黑金动力社区 ( 沪ICP备11013590沪公网安备 31011702000003号 举报投诉电话:15300558155

GMT+8, 2019-10-20 15:39 , Processed in 0.069543 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表