集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2179|回复: 2

至芯科技ZX-2开发板测评-ideal夜星海

[复制链接]
ideal夜星海 发表于 2014-4-22 14:09:21 | 显示全部楼层 |阅读模式
                                                                                                                        至芯科技ZX-2开发板测评

                首先非常感谢,至芯给我们提供这一次非常宝贵的机会,感谢至芯给大家提供这么好的一个学习和交流平台,感谢所有至芯的老师.
                能拿到这个板子对我来说 十分意外,在此我非常的感谢,至芯的王建飞学长,和李老师. 感谢他们二位到我们学校的访谈,而使我有机会接触到这个 急需学习的开发板
学习历程:               

                我是先接触的单片机,而后才学习的FPGA, 刚开始对FPGA的影响 就是高端神秘不可控制 ,  后来慢慢发现其实就是数电...而又比数电有意思多了 , 于是我抱着 单片机能做的 我用FPGA能做的更好,更快! 慢慢的喜欢上了FPGA

测试人:  陕西省安康学院11电信系电子信息工程专业2班   贺鹏
联系方式: QQ 125553253  


测试概述:

                学习单片机,,我当时遇到最难的设计 也许就是电子时钟了(当时真的挺麻烦) , 于是这次我抱着 挑战自己的目的..试着用ZX-2 来设计       
                首先介绍一下我平台环境:
                  X64 位  LINUX (ubuntu14.04)   
                  quartus ii 13.1   
                语言: Verilog HDL
                  设计目标 :电子表   
                  实现正常记时  可以随时设置 时 分 秒 的时间 (以实现)  ....并准备逐步实现...闹钟预制...整点报时 ...秒表 等功能   

                下面附上实际图片 [attachimg]9566[/attachimg]      
                通过测试...我把时间调成北京时间...过了一个1个晚上..第二天起来发现..误差不超过3秒 ...由此我个人 这款板子的 时钟非常可靠 非常稳定(当然这还需要进一步的用示波器去测试(限于时间并为来的及)

                实现方法 :
                我先将50MCLK  降成 1HZ 2HZ 4HZ  6250HZ    1HZ用来正常计时 2HZ和4HZ测试 和调时闪烁       6250HZ用来 扫描数码管 和 按键  
                然后 通过 各个always块 并行工作 顺利实现


                测试 :这次遇到的最大问题: 就是   同一个变量无法 多个always 块中赋值 ..而使 调时功能难以实现..不

               

                为了 方便大家 查看 我将所以模块都写在一个顶层文件中 下面附上我的源码本人也是刚接触的新手,,代码写的不好 注释也不详细..希望大家海涵,有好的意见挺提出来哦, 另外希望广结一些喜欢设计 喜欢编程的人)
                我的电子表 设计还在继续 感兴趣的朋友可以联系 我大家一起交流和学习



module ceshi1(
clk0,
duanx,
s,
weix
);

input clk0;
input [4:1] s;
output [7:0] duanx;
output [2:0] weix;


/*分频电路*/
reg clk1hz=1;
reg clk2hz=1;
reg clk4hz=1;

reg clkx=1;

reg [24:0] tmp1hz=1;
reg [24:0] tmp2hz=1;
reg [24:0] tmp4hz=1;
reg [24:0] tmpx=1;                       // xian shi pin lv

always @ (posedge clk0)
begin
       
        tmp1hz <=tmp1hz+1'b1;
        tmp2hz <=tmp2hz+1'b1;
        tmp4hz <=tmp4hz+1'b1;
        tmpx <=tmpx+1'b1;

////////////////////////////
        if(tmp1hz==25'd25_000_000)
        begin
        tmp1hz <=1;
        clk1hz=~clk1hz;
        end
///////////////////////////////
        if(tmp2hz==25'd12_500_000)
        begin
        tmp2hz <=1;
        clk2hz=~clk2hz;
        end
//////////////////////////////
        if(tmp4hz==25'd6_250_000)
        begin
        tmp4hz <=1;
        clk4hz=~clk4hz;
        end       
/////////////////////////////////
        if(tmpx==25'd4000)
        begin
        tmpx <=1;
        clkx=~clkx;
        end
////////////////////////////       

end                   //fenpin kuai jie shu
/******fen pin jie shu*************/
/////////////////////////////////////////////////
////////////////////////////////////////////////////

/***********************************************/

/*     kongzhi dian lu           */
reg [2:0] weix=3'b101;
reg [3:0] i=0;   //ji shu qi

reg [3:0]shi1=0;   // ge wei
reg [3:0]shi2=0;   //shi wei

reg [3:0]fen1=0;
reg [3:0]fen2=0;

reg [3:0]miao1=0;
reg [3:0]miao2=0;
////////////////////////

always @ (posedge clkx)
begin
        weix <=weix-1'b1;

        if(weix== 3'b000) weix <=3'b101;else;

end

always @ (weix)
case (weix)
3'b101 :if(x==3) i <= 4'd12;else i <= miao1;
3'b100 :if(x==3) i <= 4'd12;else i <= miao2;

3'b011 :if(x==2) i <= 4'd12;else i <= fen1;
3'b010 :if(x==2) i <= 4'd12;else i <= fen2;

3'b001 :if(x==1) i <= 4'd12;else i <= shi1;
3'b000 :if(x==1) i <= 4'd12;else i <= shi2;
endcase

wire clky1;
wire clky2;
wire clky3;
assign clky3 =(kz==0&&shanshuo==3)? s[2]+s[3]:clkjs ;   //miao
assign clky2 =(kz==0&&shanshuo==2)? s[2]+s[3]:miao_clk ;   //  fen
assign clky1 =(kz==0&&shanshuo==1)? s[2]+s[3]:fen_clk ;   // shi

////////////////miao ji shi///////////////////////////
reg miao_clk=1;
always @ (posedge clky3)
begin
        if(kz==0&&shanshuo==3) begin        miao1<=b1;        miao2<=b2; end
        if(kz!=0&&shanshuo==0)
        begin
                miao1 <=miao1+1'b1;
                if(miao1==4'd9)
                begin
                        miao1 <=0;
                        miao2 <=miao2+1'b1;
                end
       
                if(miao2==5&&miao1==9)
                begin
                        miao_clk=~miao_clk;
                        miao1<=0;
                        miao2<=0;       
                end       
        end
                if(miao2==2&&miao1==9)  miao_clk=~miao_clk;
               
end
///////////////////////////////////////////

////////////////fen ji shi///////////////////////////
reg fen_clk=1;
always @ (posedge clky2)
begin
        if(kz==0&&shanshuo==2) begin        fen1<=b1;        fen2<=b2; end
        if(kz!=0&&shanshuo==0)
        begin       
                        fen1 <=fen1+1'b1;
                        if(fen1==4'd9)
                        begin
                                        fen1 <=0;
                                        fen2 <=fen2+1'b1;
                        end
       
                                        if(fen2==5&&fen1==9)
                        begin
                                        fen_clk=~fen_clk;
                                        fen1<=0;
                                        fen2<=0;       
                        end       
        end
        if(fen2==2&&fen1==9)  fen_clk=~fen_clk;
       
end
////////////////////////////////////////////////////

////////////////shi ji shi///////////////////////////
reg shi_clk=0;
always @ (posedge clky1)
begin
        if(kz==0&&shanshuo==1) begin        shi1<=b1;        shi2<=b2; end
        if(kz!=0&&shanshuo==0)
        begin
                        shi1 <=shi1+1'b1;
                        if(shi1==4'd9)
                        begin
                                        shi1 <=0;
                                        shi2 <=shi2+1'b1;
                        end
       
                        if(shi2==2&&shi1==3)
                        begin
                                //        shi_clk=~shi_clk;
                                        shi1<=0;
                                        shi2<=0;       
                        end       
        end
        //if(shi2==2&&shi1==9)  shi_clk=~shi_clk;
       
end
///////////////////////////////////////////////////

/* ce shi mo kuai */
reg clkjs=1;        // ji shi  de clk    = 1hz
reg [24:0]tmpcs=0;    //ce shi
reg kz=1;
always @ (posedge clk0)
begin
        if(kz!=0)
        begin
                tmpcs <=tmpcs+1'b1;
                if(tmpcs==25'd25_000_000)
                begin
                        tmpcs <=1;
                        clkjs=~clkjs;
                end
        end
end


reg [3:0] b1,b2;    // linshi  gewei shi wei
reg [1:0]shanshuo=0;
always @ (posedge clk4hz)
begin
        if(s[1]==0)
                begin          
                kz<=0;
                if(shanshuo==3)shanshuo<=shanshuo+2;else shanshuo<=shanshuo+1;               
                end
                case (shanshuo)
                0 : ;
                1 : begin b1 <=shi1;b2<=shi2;    end
                2 : begin b1 <=fen1;b2<=fen2;           end
                3 : begin b1 <=miao1;b2<=miao2;        end                       
                endcase
               
        if(kz==0&&s[2]==0)
        begin
        b1 <=b1+1;
        if(b1==9) begin b2<=b2+1; b1<=0; end
        if(b2==5&&b1==9) begin b2<=0;b1<=0; end
        end
       
        if(kz==0&&s[3]==0)
        begin

                b1 <=b1-1;
        if(b1==0) begin b2<=b2-1; b1<=9; end
        if(b2==0&&b1==0) begin b2<=5; b1<=9; end
        end
       
        if(s[4]==0) begin kz<=1; shanshuo <=0;  end
end

reg [1:0] temp=0;
reg [1:0] x=0;
reg  jsq=0;
always @ (posedge clk4hz)
begin
        jsq<=jsq+1;
        temp <= shanshuo;
        x<=0;
        if(jsq==1) x<=temp;
end


/*-------------------------------------------------*/

/*    yi ma qi     */
reg [7:0] duanx = 8'b1000_0000;
always @(i)
        case (i)
4'd0 :  duanx=8'b1100_0000;
4'd1 :  duanx=8'b1111_1001;
4'd2 :  duanx=8'b1010_0100;
4'd3 :  duanx=8'b1011_0000;
4'd4 :  duanx=8'b1001_1001;
4'd5 :  duanx=8'b1001_0010;
4'd6 :  duanx=8'b1000_0010;
4'd7 :  duanx=8'b1111_1000;
4'd8 :  duanx=8'b1000_0000;
4'd9 :  duanx=8'b1001_0000;
default:duanx=8'b1111_1111;
endcase

endmodule

本帖子中包含更多资源

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

x
 楼主| ideal夜星海 发表于 2014-4-22 14:19:59 | 显示全部楼层
哦 对了 忘了附  引脚配置了

to,location

clk0,pin_23

s[1],pin_69
s[2],pin_70
s[3],pin_71
s[4],pin_72

weix[2],pin_119
weix[1],pin_115
weix[0],pin_114

duanx[0],pin_127
duanx[1],pin_128
duanx[2],pin_124
duanx[3],pin_121
duanx[4],pin_120
duanx[5],pin_126
duanx[6],pin_129
duanx[7],pin_125
王建飞 发表于 2014-4-22 23:48:47 | 显示全部楼层
同一个变量不能同时在几个always块里面赋值是语法规定的  不可逾越,这不应该成为设计中的难题!想要实现一个设计的方法很多,可以试着变换自己实现的思路。而且一个成功的设计都是由易到难的一个过程,建议先实现时、分、秒的计数,然后可以设计时,然后设置分。最后设置秒,之后再逐步的加入其它如闹铃等功能。要学会把一个复杂的东西简单化.
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-21 23:19 , Processed in 0.070972 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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