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 ...
随机推荐
- 模拟QQ登陆
public class QQLogin { public static void main(String[] args) { int id1 = 123456; String pwd1 = &quo ...
- 设计模式之设计模式概述-shejimoshigaishu
title: 设计模式之设计模式概述 date: 2022-12-04 00:21:18.469 updated: 2022-12-11 23:03:45.617 url: https://www.y ...
- Python中的协程、线程和进程
一.协程与多线程和多进程一起使用有什么不同 协程.多线程和多进程都是实现程序并发执行的方法,不过它们在工作方式和适合的应用场景上存在一些区别. 1.协程(Coroutine) 协程是在单一线程 ...
- C语言基础之四舍五入
要求:输入任意的2个小数:将这2个小数相加并显示结果:将结果按四舍五入方法转换成整数并显示. 0.0到0.4的数加上0.5不会进位,而0.5到0.9的数加上0.5会进位.所以可以依靠这个特点让计算后的 ...
- Netty 组件介绍
BootStrap Netty 中的 BootStrap 分为两种:一种是客户端的 BootStrap:一种是服务端的 ServerBootStrap. 客户端的 BootStrap 初始化客户端,该 ...
- 微服务架构下,DLI的部署和运维有何奥秘?
摘要:探讨DLI两个问题:如何在生产环境中部署与运维实现快速迭代上线,如何实现监控告警来提升整体运维能力. 华为云数据湖探索DLI是支持多模引擎的Serverless大数据计算服务,其很好的实现了Se ...
- 浅谈DWS函数出参方式
摘要:DWS的PL/pgSQL函数/存储过程中有一个特殊的语法PERFORM语法,用于执行语句但是丢弃执行结果的场景,常用于一些状态判断的场景. 本文分享自华为云社区<GassDB(DWS)功能 ...
- 华为云媒体査勇:华为云在视频AI转码领域的技术实践
摘要:为大家介绍华为云媒体处理服务在视频AI转码领域的一些技术实践. 随着5G的落地和消费终端的不断升级,消费环节对视频画质的要求也越来越高,为了给消费者带来更清晰.更逼真和更具沉浸感的观感体验,对云 ...
- 联合枚举类型:从C语言看枚举与联合类型到TypeScript/Python
枚举,还是从hello world 开奖,大部分的人应该是从C开始的,比如我.当然,这部分也可以跳过. 详说枚举类型: C语言中的enum 计算机入门时候有点印象: enum是C语言中的一个关键字,e ...
- Hive查看表/分区更新时间
1.查看分区 hive> show partitions table_name; 2.查看分区更新时间 获取hdfs路径 hive> desc formatted table_name; ...