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的更多相关文章

  1. Verilog基础入门——Vivado工程创建(三)

    Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...

  2. [分享]Ubuntu12.04安装基础教程(图文)

    [分享]Ubuntu12.04安装基础教程(图文) 原文地址: http://teliute.org/linux/Ubsetup/lesson21/lesson21.html 1.进入 live cd ...

  3. 【第一季】CH06_FPGA设计Verilog基础(三)

    [第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...

  4. 【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title

    [第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...

  5. 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title

    [第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...

  6. [Java 教程 04] Java基础语法

    在上一篇文章中我们已经运行了个简单的java程序,但是没有给大家讲解代码部分的内容与含义.学习,我们要做到知其然而知其所以然,所以本篇文章我们就来讲解java程序的基本语法,学完这篇文章你再回头看上篇 ...

  7. DLL技术应用04 - 零基础入门学习Delphi47

    DLL技术应用04 让编程改变世界 Change the world by program 利用DLL实现窗体重用 利用 Delphi 的 DLL 功能,不但能够实现过程和函数重用,而且还可以实现窗体 ...

  8. 04: linux基础总结

    目录: 1.1 Red Hat Linux 安装及服务控制 1.2 目录和文件管理 1.3 安装及管理程序 1.4 账号和权限管理 1.5 磁盘和文件管理 1.6 进程和计划任务管理 1.7 Linu ...

  9. System Verilog基础(二)

    这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...

  10. Verilog 基础回顾 (一)

    Verilog 大小写敏感,且所有关键字都是小写 1  寄存器 register = storage,是数据存储单元的抽象,可视为能够存储数值的变量 (variable that can hold v ...

随机推荐

  1. 华企盾DSC防泄密系统造成应用程序卡慢、编译卡问题

    1.先看看个人模式是否正常,正常则跟进程有关加密nofile.不启用进程水印.不启用文件夹大小缓存(源码文件去掉需慎重)都关掉.允许进程间访问(procmon排查是否有其它进程访问) 2.检查是否与H ...

  2. 使用 PostgreSQL 16.1 + Citus 12.1 作为多个微服务的分布式 Sharding 存储后端

    在本教程中,我们将使用 PostgreSQL 16.1 + Citus 12.1 作为多个微服务的存储后端,演示此类集群的样例设置和基本操作. Citus 12.1 实验环境设置 Docker 快速启 ...

  3. EvilBox : ONE - WriteUp

    EvilBox : ONE 信息收集 扫描网段内存活主机,得到目标 nmap 进一步收集有效信息,只开放了22和80 访问80的页面没有什么有效信息 接着扫一下目录, 没有敏感的文件 在robots中 ...

  4. 自定义md-loader来简单高效的维护组件文档

    个人觉得,组件库最难的不是开发,而是使用,怎么才能让组内同事都用起来,这才是关键 背景 虽然现在开源的组件库很多,但每个项目里还是或多或少都会有人封装出一些项目内通用的基础组件.业务组件 我参与过多个 ...

  5. 【scikit-learn基础】--『监督学习』之 随机森林回归

    随机森林回归(Random Forest Regression)是一种在机器学习领域广泛应用的算法,由美国科学家 Leo Breiman 在2001年提出.它是一种集成学习方法,通过整合多个决策树的预 ...

  6. Python——Html(内联框架<iframe>)

    <iframe>(内联框架)是 HTML 中的一个标签,用于在当前文档中嵌入另一个文档.它提供了一种将一个 HTML 文档嵌套到另一个文档的方式,允许在一个页面中显示另一个页面的内容.以下 ...

  7. 劫持 PE 文件:新建节表并插入指定 DLL 文件

    PE格式简介 PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe.dll.vxd.sys和vdm等)的标准文件格式.PE格式衍生于早期建立在VAX(R) ...

  8. electron入门之配置镜像加速(四)

    electron入门到入土,配置阿里镜像加速.为了防止后面我们打包龟速,需要给electron配置阿里镜像加速 在下面的文件内添加阿里镜像加速,你的文件位置不一定是这个 C:\Program File ...

  9. 华为AppCube入选Forrester《中国低代码平台市场分析报告》

    摘要:知名研究与分析机构Forrester于11月11日发布<中国低代码平台市场分析报告(The State Of Low-Code Platforms In China)>,AppCub ...

  10. Solon 小技巧收集 - 页面跳转(重定向)

    @XMapping("/") public void jump(XContext ctx){ ctx.redirect("http://www.noear.org&quo ...