Verilog入门基础知识

231 阅读2分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

 建议有一定C基础的看,因为下面知识中,我省略了许多和C相同的内容。

  当你看完下面内容后,应该就可以看懂一些基本的用Verilog语言编写的组合和数字电路了。

1.Verilog的数据类型

   寄存器、线网数据类型和参数数据类型。真正在数字电路中起作用的数据类型是寄存器类型和线网数据类型。

1.1.寄存器数据类型

只能在always语句和initial语句等过程语句中赋值。它的缺省值(默认值)为x。

在实际数字电路中,如果该过程语句描述的是:

    时序逻辑,则该寄存器变量对应为寄存器。

    组合逻辑,。。。。。。。。。。硬件连线。

    不完全组合逻辑。。。。。。。。寄存器。       

1.2.线网数据类型

  表示Verilog结构化元件间的物理连线,他的值由驱动元件的值决定。

1.3参数数据类型

   参数其实就是一个常量,通常出现在module内部,它可以再编译时修改参数的值,所以常用于一些参数可调的模块中,

  Notice:参数的定义是局部的,只在当前模块中有效。

2.Verilog的基本运算符

二、Verilog基础语法

可综合:编写的Verilog代码能够被综合器转化成相应的电路结构。

不可综合:无法综合成实际的电路。我们可以用它来仿真、验证我们描述的数字硬件电路。for语句就不行

1.1常用可综合的关键字

  always:过程赋值语句

  assign:连续赋值语句

  begin与end成对使用,相当于C语言的大括号。

  case、endcase和default成对使用相当于C语言中switch

  posedge(上升沿触发)、negecase(下降沿触发)和or这三个关键字和alaways关键字联合使用,posedge or negecase是既有上升沿又有下降沿。

always的两种用法

组合电路:

always @ (*)                 

begin                           

end            

在组合电路:always@(*)表示输入有一个输入信号变化就会执行always里面的begin

时序电路    

例:always @(posedge CLK_50M or negedeg RST_N)  

       begin

       end