Verilog基础语法

前言

        Verilog 是一种硬件描述语言,用于描述数字电路的行为和结构。它通过模块化的方式来组织设计,每个模块包含输入、输出端口和内部逻辑。Verilog 提供了丰富的语法结构,可以描述从简单的逻辑门到复杂的处理器架构的各种数字电路设计。对于其格式也有一定的规范(如下图,该实例为一简易分频器),下面对其语法进行具体介绍。

//计数器分频:偶数分频
module cnt_freq(

	input clk,//基础时钟为50MHz,即周期为20ps
	input rst_n,
	
	output reg signal//周期为2us,占空比为50%
);

reg [6:0] cnt;

always @(posedge clk,negedge rst_n)
begin
	if(rst_n == 0)//复位有效
		cnt <= 7'd0;
	else
		if(cnt < 49)//记50次20ps的clk,即1us
			cnt <= cnt + 7'd1;
		else
			cnt <= 7'd0;
end 

always @(posedge clk,negedge rst_n) 
begin
	if(rst_n == 0)
		signal <= 1'b1;
	else
		if(cnt == 49)//1us后使输出取反,再过1us后又取反,即signal一个周期为2us
			signal <= ~signal;
		else
			signal <= signal;
end

endmodule 

正文

一、Verilog 基本格式

1.写作习惯 

       Verilog 是区分大小写的。格式自由,可以在一行内编写(不推荐),也可跨多行编写(推荐)。每个语句必须以分号为结束符。空白符(换行、制表、空格)都没有实际的意义,在编译阶段可忽略。例如下面两中编程方式都是等效的。

always @(posedge clk,negedge rst_n) begin	if(rst_n == 0)		signal <= 1'b1;	else		if(cnt == 49)			signal <= ~signal ;		else signal <= signal; end
//将所有代码写一行,编辑器不会报错,但可读度下降。
always @(posedge clk,negedge rst_n) 
begin
	if(rst_n == 0)
		signal <= 1'b1;
	else
		if(cnt == 49)
			signal <= ~signal;
		else
			signal <= signal;
end
//换行,代码逻辑明了,方便查错和修改。

2.注释

        代码注释在编程中起着非常重要的作用,可以解释代码的意图,帮助他人和自己理解代码的逻辑思路。便于项目的维护和交接。良好的注释是一个程序员编写优质代码的重要组成部分。因此,在编程过程中,应该养成注释的良好习惯,注释要清晰、简洁、具有针对性,避免过多或冗长的注释,确保注释与代码保持同步更新。Verilog 中有 2 种注释方式:(在Quartus II 中对应注释的内容会变色)

        用 // 进行单行注释:

        用 /* 与 */ 进行跨行注释:

3.关键字

        由于Verilog 语法参照C语言设计,其标识符也具有一定C语言特点,标识符(identifier)可以是任意一组字母、数字、$ 符号和 _(下划线)符号的合,但标识符的第一个字符必须是字母或者下划线,不能以数字或者美元符开始。另外,标识符是区分大小写的。关键字是 Verilog 中预留的用于定义语言结构的特殊标识符。Verilog 中关键字全部为小写。下面介绍一些常用关键字(后续会补充):

module 模块名称 模块开始定义
input 端口名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张明阳.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值