我是靠谱客的博主 呆萌缘分,最近开发中收集的这篇文章主要介绍【硬件】Verilog HDL基础知识前言Verilog基本要素Verilog运算符与优先级组合逻辑与时序逻辑模块化设计注意事项建议,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • Verilog基本要素
    • wire型变量与reg型变量
    • 两种基本语句结构
  • Verilog运算符与优先级
  • 组合逻辑与时序逻辑
    • 组合逻辑
    • 时序逻辑
  • 模块化设计
    • 模块原件例化
  • 注意事项
  • 建议


前言

最近在上小学期,内容是设计单周期CPU,很久没做硬件了,顺便复习一下Verilog的相关知识。

Verilog基本要素

wire型变量与reg型变量

  • 一位wire对应数字电路中的一条线
  • 一位reg变量多数情况对应数字电路中的一个D触发器

两种基本语句结构

  • assign赋值: 用来描述线之间的组合逻辑关系,针对wire型变量
  • always语句块:用来描述电路中的时序转换,针对reg型变量
    • 阻塞赋值 = : 该语句结束时立即完成赋值操作
    • 非阻塞赋值 <= :整个过程快结束时才完成赋值操作

上图为非阻塞赋值,下图为阻塞赋值。阻塞赋值相当于b,c直连。
在这里插入图片描述

Verilog运算符与优先级

在这里插入图片描述

如果不确定优先级的话,建议使用小括号

组合逻辑与时序逻辑

组合逻辑

采用组合逻辑的器件有:全加器、多路选择器、ALU

//全加器
wire a, b, cin, s, cout; 
assign s = a ^ b ^ cin;
assign cout = (a  & b) | (b &cin) | (cin & a);
//wire 变量 ; assign 赋值语句; 阻塞赋值

时序逻辑

采用时序逻辑的器件有:D类触发器、计数器、各类状态机

input clk, reset;
reg count;
wire en;
always @(posadge clk) begin
	if(reset==0) count <= 0;
	else if(en) count <= 1;
end

模块化设计

Verilog HDL程序是由模块构成的。每个模块嵌套在module和endmodule声明语句中。模块是可以进行层次嵌套的。
每个Verilog HDL源文件中只准有一个顶层模块, 其他为子模块。源文件名称与顶层模块同名。
每个模块要进行输入输出端口定义,然后用语句对模块的功能进行描述。
【例】全加器模块化

module full_adder(a, b, cin, s, cout)
	input a, b, cin;
	output s, cout;
	assign s = a ^ b ^ cin;
	assign cout = (a & b) | (b & cin) | (cin& a);
endmodule

模块原件例化

在Verilog HDL设计中我们可以采用上层模块调用子模块的功能来实现更高层次的硬件逻辑封装。这里的模块调用可以称之为确定特定输入输出连接后的实例化。同一个设计模块可以被同一个或者多个其他模块多次实例化。
【例】两位加法器

//上层输入模块,定义输入输出信号
module serial_addr_2bits(
	input [1:0] a,
	input [1:0] b,
	input cin;
	output [1:0] s,
	output cout
);

wire carry;	//上层模块传给例化子模块对应接口的信号

full_addr_bit0(
	.a(a[0]),
	.b(b[0]),
	.c(cin),
	.s(s[0]),
	.cout(carry));
full_addr_bit1(
	.a(a[1]),
	.b(b[1]),
	.c(carry),
	.s(s[1]),
	.cout(cout));

endmodule

注意事项

写Verilog时我们需要注意以下几点:

  1. 避免逻辑回环
  2. 避免多驱动
  3. 意外生成锁存器
  4. 合理使用阻塞与非阻塞赋值
  5. 存在intial, # 等之类的语句只能用来仿真
  6. 仿真时Z表示浮空

建议

  • 除testbench外禁止使用intial语句
  • 建议 只用 always @(posedge clk)
  • 建议assign
  • 请多使用中间变量
  • 常量请加宽度

最后

以上就是呆萌缘分为你收集整理的【硬件】Verilog HDL基础知识前言Verilog基本要素Verilog运算符与优先级组合逻辑与时序逻辑模块化设计注意事项建议的全部内容,希望文章能够帮你解决【硬件】Verilog HDL基础知识前言Verilog基本要素Verilog运算符与优先级组合逻辑与时序逻辑模块化设计注意事项建议所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部