zoukankan      html  css  js  c++  java
  • VerilogHDL学习笔记(一)--来自一个小彩袅

    一.资源篇

    https://blog.csdn.net/zhengweida0519/article/details/81004158

    二.安装篇

    https://blog.csdn.net/weixin_42693097/article/details/82780125

    三.学习Vivado篇

    http://study.chinaaet.com/course/6100000016

    四.自己笔记

    1.模块顺序与并行执行的情况说明

    转自:https://blog.csdn.net/lv0817/article/details/54176420

    顺序语句是执行完一句再执行下一句,如果有非阻塞就要按照并行处理,再说几个概念: 并行,顺序:verilog主要的模块之间都是并行执行的,例如各个always之间 如果你在一个always中要对a赋值,而在另一个always中要使用a的值,这时候就要注意了,两者并行的,处理先后不能确定。 你当前处理的a,是这个时钟被赋值的还是上一时钟被赋值的,意义可能完全不同,这就是并行需要考虑的问题。  而在always内部,一般使用了begin...end。这里面的内容都是顺序执行的,比如b=a; c=b,先执行一条,再执行下一条,那就是c=a了 如果里面有两组if/else,就是先执行前一组,再执行后一组。但是如果是非阻塞,那就要特殊对待,多个非阻塞赋值是在一个块结束时一起执行的,比如b<=a; c<=b,那就跟之前不同了,当执行c<=b 时b还没有变化成a的值,因此 这个赋值的结果是b被赋值前的值,这两条语句其实是独立的、并行的。好处是放得先后顺序没关系,只要在一个块内,随便写。这个不是很好理解,怎么说了begin...end之间是顺序,到了非阻塞就又变成并行执行的呢。 不好理解也没办法, verilog就是这样,先告诉你是这样的,然后又告诉你这样行不通,习惯就好了,另外掌握几条原则:组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,同一个模块中不要既用阻塞又用非阻塞... 掌握一条思路:verilog是硬件,是电路。所以调试的时候不能设置断点 所以所有模块都是并行,毕竟一上电整个板子都有电了,你不能说让它没电就没电,但是你可以在代码中加个控制,让它到了特定时候才干活。  再说这个程序,不知道你能不能看到上面的图片,for循环是分了6个时钟才执行完的(我之前也以为是一个下降沿就执行完了 是仿真过才知道不是)。我设置了输入a,除了第一个时钟为1,之后都为0,利用这个1给最低位赋值,可以看出程序运行的顺序,对着图片看看吧。另外,for循环在硬件中效率很低,尽量少用,还是越简单越明确越好

    2.reg,wire,net类型使用注意事项

    (1)原文为:https://www.cnblogs.com/farbeyond/p/5204586.html

    wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。

    reg型表示的寄存器类型,只能在initial和always模块内被赋值,代表触发器,默认初始值是x;

    (2)两者的区别是:wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动;

    (3)用关键词inout声明一个双向(输入&输出)端口, inout端口不能声明为寄存器类型,只能是net类型。

    (4)reg变量在always块中有两种情况:always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑   always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

    (5)在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

    Higher you climb, more view you will see.
  • 相关阅读:
    数据结构_线性结构
    多线程01_基础
    操作系统05_文件管理
    解析静态内部类的使用目的与限制(转)
    mysql去除重复记录案例
    mysql 索引使用策略及优化
    mysql 索引数据结构及原理
    mysql 索引的简单使用
    当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
    14 线程间协作的两种方式:wait、notify、notifyAll和Condition
  • 原文地址:https://www.cnblogs.com/yyfighting/p/12500654.html
Copyright © 2011-2022 走看看