FPGA:Verilog HDL程序的基本结构
2023-03-07 09:15:21 时间
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 ?本文已收录于FPGA系列专栏:FPGA Tutorial 欢迎订阅,持续更新。 ?文章和代码已归档至【Github仓库】,需要的朋友们自取。
简单Verilog HDL程序实例
Verilog使用大约100个预定义的关键词定义该语言的结构
- Verilog HDL程序由模块构成。每个模块的内容都是嵌在两个关键词module和endmodule之间。每个模块实现特定的功能。
- 每个模块先要进行端口的定义,并说明输入(input) 、输出(output) 和双向(inout),然后对模块功能进行描述。
- 除了endmodule外,每个语句后必须有英文的分号(?。
- 可以用/* — */和//……,对Verilog HDL程序的任何部分做注释。
半加器程序实例
/* Gate-level description of a half adder */
module HalfAdder_GL(A, B, Sum, Carry);
input A ,B ; //输入端口声明
output Sum, Carry ; //输出端口声明
wire A ,B , Sum ,Carry ;
xor X1 (Sum, A, B );
and A1 (Carry, A, B);
endmodule
/* Dataflow description of a half adder */
module HalfAdder_DF(A, B, Sum, Carry);
input A ,B ;
output Sum ,Carry ;
wire A ,B,Sum ,Carry ;
assign Sum = A ^ B;
assign Carry = A & B;
endmodule
/* Behavioral description of a half adder */
module HalfAdder_BH(A, B, Sum, Carry);
input A ,B ;
output Sum ,Carry ;
reg Sum ,Carry ; //声明端口数据类型为寄存器
always @(A or B) begin
Sum = A ^ B; //用过程赋值语句描述逻辑功能
Carry = A & B;
end
endmodule
2选1数据选择器的程序实例
module mux2to1(a, b, sel, out);
input a, b, sel; //定义输入信号
output out; //定义输出信号
wire selnot,a1,b1; //定义内部节点信号数据类型
//下面对电路的逻辑功能进行描述
not U1(selnot, sel);
and U2(a1, a, selnot);
and U3(b1, b, sel);
or U4(out, a1, b1);
endmodule
module mux2_1(out, a, b, sel) ;
output out;
input a, b;
input sel;
reg out;
always @(sel or a or b)
begin
if (sel)
out = b;
else out = a;
end
endmodule
行为描述:
module mux2_1(out, a, b, sel) ;
output out;
input a, b;
input sel;
reg out;
always @(sel or a or b)
begin
case (sel)
1’b0 : out = a;
1’b1 : out = b;
endcase
end
endmodule
Verilog HDL程序的基本结构
模块定义的一般语法结构如下:
module模块名(端口名1,端口名2,端口名3,…) ;
端口类型说明(input, output, inout);
参数定义(可选);
数据类型定义(wire, reg等);
实例化低层模块和基本门级元件;
连续赋值语句(assign);
过程块结构(initial和always)
行为描述语句;
endmodule
几种描述方式小结:
结构描述(门级描述)方式:
一般使用Primitive(内部元件)、自定义的下层模块对电路描述。主要用于层次化设计中。
数据流描述方式:
一般使用assign语句描述,主要用于对组合逻辑电路建模。
行为描述方式:
一般使用下述语句描述,可以对组合、时序逻辑电路建模。
- initial 语句
- always 语句
相关文章
- 在 Amazon EMR on Amazon EKS 上使用您的 Apache Spark 应用程序自定义和打包依赖项
- 新功能 – Amazon BugBust:消灭所有错误
- python socket编程
- 引领行业趋势,基于云上ARM架构赋能数值天气预报
- Python lxml教程
- 基于Amazon Kinesis Video Streams实现 IP Camera云存项目
- 推出适用于 AWS CloudFormation 的公有注册表
- 使用Amazon Step Functions实现Amazon CloudWatch持续报警
- 亚马逊云科技(中国区)网关负载均衡服务集成FortiGate安全网关扩展安全服务性能
- Amazon Glue ETL作业调度工具选型初探
- 参加 Graviton 挑战,迁移您的工作负载!
- 新增 Amazon Step Functions Workflow Studio:一种用于构建状态机的低代码可视化工具
- 华盛顿邮报的 Arc Publishing 如何使用 CloudWatch Metrics Explorer 来降低成本
- SaaS Boost 安装避坑指南
- 提醒 — AWS 新闻博客 RSS 源更改
- 即将推出 – AWS 以色列特拉维夫区域
- Amazon SageMaker 被评为企业 MLOps 平台的绝对领导者
- 利用 AWS Serverless 构建现代化的自动驾驶数据注入管理平台
- 使用 Dex 和 dex-k8s-authenticator 对 Amazon EKS 进行身份验证
- 新功能 – Amazon App Runner:几分钟内就可通过代码创建可扩展、安全的 Web 应用程序