查看: 150|回复: 0

[原创] 锆石A4_数字时钟再开发及经验分享

[复制链接]

2

主题

0

好友

56

积分

童生

Rank: 2

  • TA的每日心情
    开心
    2016-9-14 16:29
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2016-8-26 12:52:47 |显示全部楼层
    本帖最后由 §,遇&见。§ 于 2016-8-27 18:24 编辑

           作为FPGA初学者,真心感觉锆石A4很精致,老师讲解有条理,很清晰明了,是一个入门开发,进阶的好工具!
           经过自己的认真学习,终于把我从FPGA的入门苦海中拉出,所以尝试这个在实战演练篇数字时钟的基础上,添加了一些附加的功能和应用,代码见附件,主要功能如下:

    1、数码管动态显示时间(xx时xx分xx秒格式)
    2、数字时钟可调,可加可减进行时间准确度调试。(key1 2 3 对应时分秒减 ,5 6 7对应时分秒加  8启动数字时钟)
    3、整点报时,类似新闻联播模式
    4、LED灯流水闪动。

    下面是 最近的学习笔记,与大家共享
    1、
    连续赋值:
    1)语法上,有关键词“assign”来标识;
    2)左侧被赋值的数据类型必须是线网型数据(wire);
    3)连续赋值语句不能出现在过程快中(initial/always);
    4)连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述;
    5)连续赋值语句产生作用后,赋值表达式中信号的任何变化都将立即被反映到赋值线网型数据的取值上;

    过程赋值:
    1)语法上,没有关键词“assign”;
    2)左侧被赋值的数据类型必须是寄存器类型的变量(reg);
    3)过程性连续赋值语句只能出现在过程块中;
    4)过程性连续赋值语句主要用来对时序逻辑电路进行行为描述;
    5)在过程赋值语句的情况下,只有在过程赋值语句被执行时才执行赋值操作,语句执行完后被赋值变量的取值不再受到赋值表达式的影响;

    2、
        以$字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制。这种机制可在设计的不同部分被调用。

    3、
        Verilog HDL 有两大类数据类型
       1) 线网类型。net type 表示Verilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。
      2) 寄存器类型。register type表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量具有x 的缺省值。

    4、阻塞赋值一般用于 组合逻辑; 非阻塞赋值一般用于 时序逻辑;  建议:在设计时最好采用非阻塞赋值

    5、
            forever :重复执行直到仿真结束,常用于产生周期性的波形,用来作为仿真测试信号。一般写在initial里面。
            repeat:将一条语句循环执行确定的次数。
            for:与c语言不同的是,循环变量增值不能采用自增的形式。        for语句综合器已经可以综合,但是while ,repeat 和forever 还不能综合。

    6、
            递归函数在调用之前,要加上automatic关键字,在函数调用时,仿真器会为其动态的分配新的地址空间,避免了错误的发生。

    7、  ==  代表相等,是对于已知值来说的   1 或0        ===  代表条件值相等  1 、0 、X、Z  用于仿真环境

    8、组合逻辑电路中,else 考虑不完整,会产生latch(锁存器),但是在时序逻辑电路 不写else 也是可以的,因此latch的产生主要是因为在组合逻辑条件考虑不完整造成的。

    9、当需要把输出信号反馈到输入信号的情况时,我们应该使用时序逻辑,而不能直接使用组合逻辑,因为组合逻辑在一个时刻之内会进行不断地反转,造成电路不稳定。

    10、Verilog HDL中拼接运算符的理解

            1.截取数据的不同位数进行拼接:

            例:data1 = 0100_1101
                    data2 = 1011_0011
                    data = {data1[3:0],data2[7:4]}
                    则可得:data = 1101_1011

            2.作为移位运算符使用,即在一个数据中对不同的位进行拼接,可以实现移位的作用:
                    这里需要补充一下移位运算符的用法:
                    左移:<<              右移:>>
                    无符号类型:当操作数和结果数不一致时,需要在高位填0后,再进行移位;
                    有符号类型:当操作数和结果数不一致时,需要在高位填补符号位后,再进行移位。

                    data = 0011_0101
                    data1 = {1’b0,data[7:1]},则data1 = 0001_1010
                    data2 = (data >> 1),则data2 = 0001_1010
    11、verilog的always块内begin 和 end间语句若为阻塞语句赋值,则是顺序执行。若为非阻塞语句赋值,则为并行执行。

    12、integer  可负可正 ;reg  属于无符号变量,其负数应通过补码的形式转化为无符号的数,如 -1 在八位书中代表 代表255 ,即 1111 1111。


    附:频率与音色对照表
    音调                低                中                高       
    DO                262                523                1046(hz)
    RE                294                587                1175
    MI                330                659                1318
    FA                349                698                1397
    SO                392                784                1568
    LA                440                880                1760
    SI                494                988                1967       

    A4_Clock.zip

    4.18 MB, 下载次数: 6

    数字时钟

    回复

    使用道具 举报

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

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-5 10:23 , Processed in 0.155013 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部