当前位置:   article > 正文

FPGA笔记1——Verilog语法_verilog 用case给总线寄存器赋值

verilog 用case给总线寄存器赋值

目录

一、Verilog基础语法

1.1 逻辑值:

1.2 数字进制:

1.3 标识符 

1.4 数据类型:

寄存器

线网

参数类型

1.5 运算符

二、Verilog程序框架

2.1 注释

2.2 关键字

2.3 模块的结构

2.4 模块的调用

三、Verilog高级知识点

3.1 赋值语句

3.2 结构语句

initial

always

 3.3 条件语句

if_else 语句

case语句(多分支选择语句)

四、状态机

4.1 概念与模型

 4.2 状态机设计

1、状态空间定义

2、状态跳转

3、下个状态判断

4、各个状态下的动作


一、Verilog基础语法

1.1 逻辑值:

0、1、X(不定)、Z(高阻态 悬空状态)


1.2 数字进制:

二进制 b:4’b0101 四位二进制数字0101
八进制 o
十进制 d:4'd2 四位十进制数2(二进制0010)
十六进制 h:4'ha 四位十六进制数a(二进制1010)
若未指定,默认32'd(前面的位数是指二进制的位数)


1.3 标识符 

用于定义模块名、端口名、信号名

任意一组字母、数字、&、_的组合

  1. 第一个字符必须是字母或者下划线
  2. 区分大小写,不建议大小写混合使用
  3. 普通内部信号建议全部小写

推荐:sum cpu_addr clk_50 clk_cpu


1.4 数据类型:

  • 寄存器

         关键字reg 默认初始值x

  1. //reg difine
  2. reg[31:0] delay_cnt; //延时计数,32位寄存器(0~31),指定位宽时高位在前
  3. reg key_reg; //未指定位宽,默认为1

        只能在always、initial语句中被赋值

        若时序逻辑,always语句带时钟信号,该寄存器为触发器

        若组合逻辑,always语句不带时钟信号,该寄存器对应变量为硬件连接

  • 线网

        表示结构实体之间的物理连线

        关键字wire/tri 不能存储值,是由驱动他的元件(门、连续赋值语句、assign)决定的,若无驱动,则默认为高阻

  1. //wire define
  2. wire key_flag; //按键标志,默认1位

  • 参数类型

        即常量用parameter定义

  1. //parameter define 4.3'RGB LCD
  2. parameter H_SYNC = 11'd41; //行同步。可以一次定义多个参数,参数参数之间需要用逗号隔开

        常用于定义状态机的状态、数据位宽、延迟大小。

1.5 运算符

算数运算符:+ - * /(整除,只保留整数部分) %(模除,求余)

关系运算符:>,<, <=,>=,==,!=

逻辑运算符:!a, a&&b, a||b

条件运算符:?:(a?b:c  如果啊为正,就选择b,否则选择c)

                             result = (a>=b)?a:b;   //a,b取高位

位运算符:~a, a&b, a|b, a^b (若两变量位宽不同,小位宽前补零)

移位运算符:a<<b(a左移b位),a>>b(a右移b位)

                                用0填补移出的空位:

                                4'b1001<<2=6'b100100(位宽增加)

                                4'b1001>>1=4'b0100(最后一位丢弃,空位用0补齐)

拼接运算符:{a,b}(将a和b拼接起来,作为一个新的信号)

                                c[11:0]= { a[7:0],b[3:0] }

运算符的优先级

二、Verilog程序框架

2.1 注释

注释方式:

//本行

/*可以拓展

到多行*/

2.2 关键字

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号