verilog学习(一)基础知识

基础知识

基础知识

逻辑值

  • 0

  • 1

  • X 未知电平

  • Z 高阻抗

数字进制格式

  • 二进制 4’b0101

  • 十进制 4’d2

  • 十六进制 4’ha

前面的位宽是二进制位宽,若不加前面位宽,默认是32位

若不写进制,默认是10进制

标识符

模块名、端口名、信号名

数据类型

寄存器类型

reg [31:0] delay_cnt

reg类型数据只能在always和initial语句中被赋值,若未赋值,则为X

如果该语句为时序逻辑,即always语句中时钟信号,该寄存器变量对应为触发器

如果该语句为组合逻辑,即always语句中时钟信号,该寄存器变量对应为硬件连线

线网类型

线网类型数据不能存储值,他的值由驱动他的元件决定,若没有驱动元件,则其为Z

  • wire

    wire key_flag

  • tri

参数类型

参数类型类似于C的define

  • parameter

parameter H_SYNC = 11’d41

运算符

运算值后面再学一遍

条件运算法 ?:

a?b:c

result = (a>b)? a:b;

Verilog程序框架

verilog的基本单元是模块

一个模块由“接口”和“功能”组成

模块的编写:

接口包括:

端口定义、IO说明

功能包括:

参数定义(局部变量)、主要功能

其中,主要功能有always和assign两种,还能够例化实例元件

  • always 是时序逻辑+组合逻辑

  • assign 是组合逻辑

module flow_led(a,b,c,d);  //端口定义 a,b,c,d默认是wire类型
    input a,b;             //IO说明
    output c,d;
//功能定义
assign c = a | b;		//assign 给 wire 变量复制
assign d = a & b;
    
endmodule
module flow_led(
	input	sys_clk, //默认是wire
	input	sys_rst_n,
    output reg [1:0] led //使用寄存器类型要单独说明
); // 该种端口定义方法将端口定义和IO说明放在一起了
    
  //信号定义
    reg [26:0] cnt;
  
  //功能定义
    always
        end
    always
        end
        
endmodule

模块的调用

模块的调用再学一下https://www.bilibili.com/video/BV1TJ411R7YY?p=12&spm_id_from=pageDriver

猜你喜欢

转载自blog.csdn.net/shenchen2010/article/details/120934617