04-Verilog基础_3
Module
Module是verilog中的关键字,是对电路建模的最小单元。verilog中构建一个电路,对于一个硬件进行描述在module中进行。

半加器

module half_adder(S,C,A,B);
output S,C;
input A,B;
wire S,C,A,B;
assign S = A ^ B;
assign C = A & B;
endmodule
全加器

module full_adder(sum,cout,in1,in2,cin);
output sum,cout;
input in1,in2,in3;
wire sum,cout,in1,in2,cin;
half_adder ha1(I1,I2,in1,in2);
half_adder ha2(sum,I3,I1,cin);
assign cout = I2 || I3;
endmodule

Hierachical Names

Continuous Assignments(连续赋值语句)
- 将左侧和右侧连起来,建立连接关系

- 线网类表示逻辑门与模块之间的连接,具体的类型有:wire、wand、wor、tri、triand、trior、tri0、tri1、trireg、uwire、supply0、supply1

Structural Model(Gate Level)



- 组合逻辑电路是没有DFF的,触发器如何描述,取决于综合逻辑工具。
半加器的实现
- 使用verilog中的门电路实现半加器
module half_adder(S,C,A,B);
output S,C;
input A,B;
wire S,C,A,B;
xor #2 (S,A,B);
and #1 (C,A,B);
endmodule

- 这种门电路的实现是不推荐的,这里的门电路相当于将RTL代码进行逻辑综合之后映射到特定工艺库中的东西。
Behavioral Model-Procedure(i)


- 实现二选一的mux
begin
if(sel == 0)
Y = B;
else
Y = A;
end


Block statement
- fork-join是不可综合的,不能用于构建电路




Initial & Always
- @--等的意思



event

半加器实现--always语句

- 半加器和DFF
// half adder
module half_adder(S,C,A,B);
output S,C;
input A,B;
reg S,C;
always @(A or B){
S = A ^ B;
C = A && B;
}
endmodule
//DFF
module dff(Q,D,Clk);
output Q;
input D,Clk;
reg Q;
wire D,Clk;
always @(posedge Clk){
Q = D; //这里这种写法是错误的,应该使用非阻塞赋值写法
}
endmodule


Timing
- verilog语言中特有的


if

四选一mux实现

// 4-to-1 mux
module mux 4_1(out,in,sel);
output out;
input [3:0] in;
input [1:0] sel;
reg out;
wire in,sel;
always @(in or sel)
if(sel == in[0])
out = in[0];
else if(sel == in[1]
out = in[1];
else if(sel == in[2]
out = in[2];
else
out = in[3];
endmodule
- 还可以使用三目运算符
case

实现四选一
module mux 4_1(out,in,sel);
output out;
input [3:0] in;
input [1:0] sel;
reg out;
wire [3:0] in;
wire [1:0] sel;
always @(in or sel)
case (sel)
2'b00 : out = in[0];
2'b01 : out = in[1];
2'b10 : out = in[2];
2'b11 : out = in[3];
endcase
endmodule
for

- 可以实现计数器
module count(Y,start);
output [3:0] Y;
input start;
reg [3:0] Y;
wire start;
integer i;
initial
Y = 0;
always @(posedge start)
for(i = 0;i < 3;i = i+1)
#10 Y = Y + 1
endmodule
- for循环是不是可综合的,取决于循环变量是不是固定的
while

repeat


forever

- 时钟建模
module test;
reg Clk;
initial begin
clk = 0;
foever #10 clk = ~clk;
end
other_module o1(clk,....);
other_module o2(...,clk,...);
endmodule
04-Verilog基础_3的更多相关文章
- Verilog基础入门——Vivado工程创建(三)
Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...
- [分享]Ubuntu12.04安装基础教程(图文)
[分享]Ubuntu12.04安装基础教程(图文) 原文地址: http://teliute.org/linux/Ubsetup/lesson21/lesson21.html 1.进入 live cd ...
- 【第一季】CH06_FPGA设计Verilog基础(三)
[第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...
- 【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title
[第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...
- 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
[第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...
- [Java 教程 04] Java基础语法
在上一篇文章中我们已经运行了个简单的java程序,但是没有给大家讲解代码部分的内容与含义.学习,我们要做到知其然而知其所以然,所以本篇文章我们就来讲解java程序的基本语法,学完这篇文章你再回头看上篇 ...
- DLL技术应用04 - 零基础入门学习Delphi47
DLL技术应用04 让编程改变世界 Change the world by program 利用DLL实现窗体重用 利用 Delphi 的 DLL 功能,不但能够实现过程和函数重用,而且还可以实现窗体 ...
- 04: linux基础总结
目录: 1.1 Red Hat Linux 安装及服务控制 1.2 目录和文件管理 1.3 安装及管理程序 1.4 账号和权限管理 1.5 磁盘和文件管理 1.6 进程和计划任务管理 1.7 Linu ...
- System Verilog基础(二)
这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...
- Verilog 基础回顾 (一)
Verilog 大小写敏感,且所有关键字都是小写 1 寄存器 register = storage,是数据存储单元的抽象,可视为能够存储数值的变量 (variable that can hold v ...
随机推荐
- MES数据追溯常遇问题及解决方法
MES数据追溯常遇问题及解决方法: 在实际数字化工厂MES应用过程,由于设计或使用不当,数据追溯过程中也可能会存在诸多问题,常遇问题包括:1. 数据质量问题 可能存在数据录入错误.数据缺失或不完整等情 ...
- 【eBPF-02】入门:基于 BCC 框架的程序进阶
本文是 eBPF 系列的第二篇文章,我们来学习 eBPF BCC 框架的进阶用法,对上一篇文章中的代码进行升级,动态输出进程运行时的参数情况. 主要内容包括: 通过 kprobe 挂载内核事件的 eB ...
- 微软真是活菩萨,面向初学者的机器学习、数据科学、AI、LLM课程统统免费
微软真是活菩萨,面向初学者的机器学习.数据科学.AI.LLM课程统统免费 大家好,我是老章 推荐几个质量上乘且完全免费的微软开源课程 面向初学者的机器学习课程 地址:https://microsoft ...
- (转)Harbor 启用镜像扫描功能方法
A demo environment with the latest Harbor stable build installed. For additional information please ...
- GetX GetUtils
GetUtils 是 getx 为我们提供一些常用的工具类库,包括值是否为空.是否是数字.是否是视频.图 片.音频.PPT.Word.APK.邮箱.手机号码.日期.MD5.SHA1等等. class ...
- flink 笔记
flink 分区实现 http://smartsi.club/physical-partitioning-in-apache-flink.html
- Istio与Kubernetes:资源管理与协同解析
本文分享自华为云社区<istio资源介绍以及和kubernetes资源扭转关系>,作者:可以交个朋友. 一.istio原理 Istio的原理是拦截 Kubernetes 中创建 Pod 的 ...
- 40个问题让你快速掌握Java多线程的精髓
摘要:多线程可以理解为在同一个程序中能够同时运行多个不同的线程来执行不同的任务,这些线程可以同时利用CPU的多个核心运行. 多线程可以理解为在同一个程序中能够同时运行多个不同的线程来执行不同的任务,这 ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比
摘要: 高斯Redis,兼具开源Redis和HBase各自优点,提供成本更低.性能更好.灵活性更强的数据库服务! 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘 ...
- 毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?
摘要:了解大厂面试流程.要求以及技巧,做好充分准备,赢在职场起跑线. 本文分享自华为云社区<毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?>,作者:华为云社区精选. 同学们 ...