Verilog HDL语言不全面但基本入门够用介绍

来源:互联网 发布:mac os x sierra壁纸 编辑:程序博客网 时间:2024/05/01 05:11

本质 : Verilog是一种即可用于电路设计也可用于模拟仿真的HDL语言,所谓HDL语言即描述线路的语言
类型 : ce que l’on a besoin d’apprendre , c’est seulement deux types qui pourraient etre synthetisés par des logiciels : reg et wire.

  • reg, c’est un registre
  • wire, c’est une wire..
  • integer

语句 : on a seulement 3 types de description en Verilog, description d’agitation, de flux, et de structure.

  • Description d’agitation : always @ (posedge Clock or negedge
    Reset_n);
    accepte seulement des reg comme variation
  • Description de flux : assign #1 A = B; accepte seulement des wire
    comme variation
  • Description de structure : xor #1 (result, eq1, eq2);

框架1 :

    module Hello(des inputs et des outputs pin) ;    //definition de pin : input ou output , inout    // definition des pins et des variables dans la module, et des « parameter »    //descriptions ....generalment, plus simple , plus belle.     endmodule

框架2 :

    Always @ (posedge Clock or negedge Reset_n)        begin        end

赋值 :

    A <= B // c’est en parallele    B <= C    {eq1, eq2, eq3, eq4} = 4’b0001 ;    assign a = b ;//a est une wire 

在一个module中,变量只能在一个描述内被赋值,不可以有多个描述进行赋值
寄存器数组 :

  • 1d : reg [3:0] ABC largeur est 4
  • 2d : reg [3:0] ABC [0:7] largeur est 4, et longeur est 8

操作符 :

  • 归约 : &与 ~非 |或 ^亦或 example : &4b1000 = 1b0
  • 相等 : == != 至于全等,则不能用于综合
  • 逻辑 : ! || &&
  • 位操作 : ~每个二进制取反 & | ^

条件语句 :

    if (condition)        begin            block        end    else        phrase ;
    case ({A, B})    2`b00 : ...    endcase

循环语句 :

for (i =4 ; i <= 7 ; i = i +1)    begin    endwhile (condition)    repeat (8)        begin        end

实例化模块
模块内 input 和 inout必须是线网,因为输入的肯定是一根电线。。。
输出可以随意
模块外相反。
状态机 :
Generalement, on l’ecrit sous la forme de 2 phases ou 3 phases. Le premier est temporel, deuxième est logic , 3eme pourrait etre temporel
任务
时序逻辑不推荐使用task
Testbench :

  • Clock signal :
    parameter FAST_PERIOD = 10 ;        reg Clock ;        initial            begin                Clock = 0 ;                forever # (FAST_PERIOD/2) Clock = ~Clock ;            end        end
    initial        Clock = 0;    always # (FAST_PERIOD/2) Clock = ~Clock;
  • Reset:
    • 同步
    • 异步
0 0
原创粉丝点击