2.1 Verilog HDL基本结构

**HDL(Hardware Description Language)**硬件描述语言是对硬件电路进行行为描述、寄存器传输描述或者结构化描述的一种语言。

FPGA作为可编程硬件,采用HDL语言作为编程语言。

通过HDL语言可以对FPGA的功能进行描述,描述完成后的源代码,通过综合(将高层次的寄存器传输级别的HDL设计转化为优化的低层次的逻辑网表)和实现及生成目标文件后,下载到FPGA以实现对FPGA进行配置,配置后的PGA实现了HDL语言描述的功能。(下载:1.jtag调试模式,断电,消失2.下载到flash)

1 一个简单的组合逻辑实例

1.1 模块声明

从模块的声明开始,最开始就是关键词module ,然后是这个模块的名字叫AND4 ,最后是endmodule。assign是是组合逻辑的赋值语句。

module AND4(a,b,out);
output[3:0] out; //4位输出
input [3:0] a,b; //4位输入a和b
assign out=a&b; //out=a与b进行按位与
endmodule

在这里插入图片描述

1.2 端口定义的两种写法

法一:端口声明和端口定义分开写

module AND4(a,b,out);
output[3:0] out;
input [3:0] a,b;
assign out=a&b;
endmodule

法二:端口声明和端口定义写在一起

module AND4(input [3:0] 
a, input [3:0] b,
output[3:0] out);
assign out=a&b; 
endmodule

在这里插入图片描述

2 一个简单的时序逻辑实例

2分频:在always块中只能对寄存器变量赋值。

module FenPin(input clk_in, output clk_out);
reg c_out=0;
assign clk_out=c_out;
always @ (posedge clk_in) 
begin
c_out=~c_out; 
end
endmodule

在这里插入图片描述在这里插入图片描述

3 Verilog HDL结构要求

  1. Verilog HDL程序是由模块构成的。每个模块嵌套在module和endmodule声明语句中。
  2. 每个Verilog HDL源文件中只有一个顶层模块,其他为子模块。可以每个模块写一个文件。
  3. 每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。
  4. 模块中的时序逻辑部分在always块的内部,在always块中只能对寄存器变量赋值。
  5. 模块中对端口或其他wire型变量的赋值,必须在always块的外部使用assign语句,通常是将寄存器的值送出。
  6. 程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。
  7. 除了endmodule语句、begin_end语句和fork_join语句外,每个语句和数据定义的最后必须有分号。
  8. 可用//和//…对程序的任何部分作注释。加上必要的注释,可以增强程序的可读性和可维护性。
    在这里插入图片描述
    verilog的一般语法结构:
module 模块名(端口名1,端口名2,端口名3,端口名4,...);
端口定义说明(input,output,inout);
参数定义(可选);
数据类型定义(wire,reg等);
//…………………………以上为描述接口说明部分…………………………// 
//…………………………以下为描述逻辑功能部分…………………………// 
实例引用低层次模块和基本门级元件; 
连续赋值语句(assign); 
过程赋值语句(initial和always);
功能描述语言;
任务和函数;
endmodule
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值