(总)基于Verilog的4位计数器源程序与testbench测试程序

(总)基于Verilog的4位计数器源程序与testbench测试程序
(总)基于Verilog的4位计数器源程序与testbench测试程序

1、简单4位计数器程序:

module count4(clk,cnt);

input clk;

output reg[3:0]cnt=4'b0;

always @(posedge clk)

begin

cnt<=cnt+1;

end

endmodule

测试程序:

`timescale 1 ns/10 ps

module test_count4();

reg clk=0;

wire [3:0]cnt;

count4 i1(.clk(clk),.cnt(cnt));

always #10 clk=~clk;

initial

begin

$monitor($time,,,"clk=%d cnt=%d",clk,cnt); #400 $stop;

end

endmodule

仿真波形:

2、异步清零4位计数器源程序

module count4_reset(clk,rst,cnt);

input clk,rst;

output reg[3:0]cnt=4'b0;

always @(posedge clk or negedge rst)

begin

if(!rst) cnt<=4'b0;

else cnt<=cnt+1;

end

endmodule

测试程序

`timescale 1 ns/10 ps

module test_count4_reset();

reg clk=0;

reg rst;

wire [3:0]cnt;

count4_reset i1(.clk(clk),.rst(rst),.cnt(cnt));

always #10 clk=~clk;

initial

begin

rst=0;

#20 rst=1;

#45 rst=0;

#10 rst=1;

end

initial

begin

$monitor($time,,,"clk=%d rst=%d cnt=%d",clk,rst,cnt);

#800 $stop;

end

endmodule

仿真波形

3、异步清零、计数使能控制的4位计数器

module count4_rst_en(clk,rst,en,cnt);

input clk,rst,en;

output [3:0]cnt;

reg [3:0]cnt;

always @(posedge clk or negedge rst)

begin

if(!rst) cnt<=0;

else if(en==1) cnt<=cnt+1;

end

endmodule

测试程序

`timescale 1 ns/10 ps

module test_count4_rst_en();

reg clk=0;

reg rst,en;

wire [3:0]cnt;

count4_rst_en i1(.clk(clk),.rst(rst),.en(en),.cnt(cnt));

always #10 clk=~clk;

initial

begin

rst=0;en=0;

#15 en=1;

#20 rst=1;

#20 en=0;

#20 en=1;rst=0;

#20 rst=1;

end

initial

begin

$monitor($time,,,"clk=%d rst=%d en=%d cnt=%d",clk,rst,en,cnt);

#800 $stop;

end

endmodule

仿真波形:

4、异步清零、计数使能、数据加载控制功能的4位计数器:

module count4_rst_en_load(clk,rst,en,load,data,cnt);

input clk,rst,en,load;

input [3:0]data;

output reg[3:0]cnt;

always @(posedge clk or negedge rst)

begin

if(!rst) cnt<=0;

else if(en==1)

begin

if(load) cnt<=data;

else cnt<=cnt+1;

end

end

endmodule

测试程序:

`timescale 1 ns/10 ps

module test_count4_rst_en_load();

reg clk=0;

reg rst,en,load;

reg [3:0]data;

wire [3:0]cnt;

count4_rst_en_load i1(.clk(clk),.rst(rst),.en(en),

.load(load),.data(data),.cnt(cnt));

always #10 clk=~clk;

initial

begin

rst=0;en=0;load=0;data=4'd6;

#20 en=1;

#20 rst=1;

#20 load=1;

#20 rst=0;

#20 rst=1;

#20 load=0;

end

initial

begin

$monitor($time,,,"clk=%d rst=%d en=%d load=%d cnt=%d",

clk,rst,en,load,data,cnt);

#800 $stop;

end

endmodule

仿真波形:

VERILOG语言编写规范

VERILOG语言编写规范 1 目的 本规范的目的是提高书写代码的可读性可修改性可重用性,优化代码综合和仿真结果,指导设计工程师使用VerilogHDL规范代码和优化电路,规范化公司的ASIC设计输入从而做到 1. 逻辑功能正确 2.可快速仿真 3. 综合结果最优如果是hardware model) 4. 可读性较好。 2 范围 本规范涉及Verilog HDL编码风格,编码中应注意的问题, Testbench的编码等。 本规范适用于Verilog model的任何一级( RTL behavioral, gate_level),也适用于出于仿真,综合或二者结合的目的而设计的模块。 3 定义 Verilog HDL : Verilog 硬件描述语言 FSM :有限状态机 伪路径:静态时序分析( STA)认为是时序失败,而设计者认为是正确的路径 4 引用标准和参考资料 下列标准包含的条文通过在本标准中引用而构成本标准的条文在标准出版时所示版本 均为有效所有标准都会被修订使用本标准的各方应探讨使用下列标准最新版本的可能性 Actel HDLCoding Style Guider Sun Microsystems Revision 1.0 VerilogStyle and Coding Guidelines 5 规范内容 5.1 Verilog 编码风格

本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何一级( RTL behavioral,gate_level) 也适用于出于仿真,综合或二者结合的目的而设计的模块。 5.1.1 命名规范 选择有意义的信号和变量名,对设计是十分重要的。命名包含信号或变量诸如出处,有效状态等基本含义下面给出一些命名的规则。 1. 用有意义而有效的名字 有效的命名有时并不是要求将功能描述出来如 For ( I = 0; I < 1024; I = I + 1 ) Mem[I]<= #1 32’b0; For 语句中的循环指针I 就没必要用loop_index作为指针名。 2. 用连贯的缩写 长的名字对书写和记忆会带来不便,甚至带来错误采用缩写时应注意同一信号在模块中的一致性。缩写的例子如下: Addr address Pntr pointer Clk clock Rst reset 3. 用名字前加小写n表示低电平有效高电平有效的信号不得以下划线表示短暂 的引擎信号建议采用高有效 如 nRst, nTrdy, nIrdy nIdsel. 4. 大小写原则 名字一般首字符大写,其余小写(但parameter, integer 定义的数值名可全部用大写),两个词之间要用下划线连接(或第二个单词首字母大写) 如 :Packet_addr, Data_in, Mem_wr , Mem_ce_ Or: PacketAddr, DataIn, MemWr , MemCe 5.全局信号名字中应包含信号来源的一些信息 如: D_addr[7:2] 这里的 D 指明了地址是解码模块(Decoder module)中的地址.

VERYLOG编码规范

Verilog编码规范! 一. 强调Verilog代码编写风格的必要性。 强调Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。 每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和接受起来就困难一些。 曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在1万行数量级。代码的整洁程度,很大程度上影响着代码的维护难度。 遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相反代码编写风格随意的代码,通常晦涩、凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦。 (实际上英文Coding Style有另一层涵义,更偏重的是,某一个电路,用那一种形式的语言描述,才能将电路描述得更准确,综合以后产生的电路更合理。本文更偏重的是,编写Verilog代码时的书写习惯。) 二. 强调编写规范的宗旨。 缩小篇幅 提高整洁度 便于跟踪、分析、调试 增强可读性,帮助阅读者理解 便于整理文档 便于交流合作 三. 变量及信号命名规范。 1. 系统级信号的命名。 系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以字符串Sys开头。 2. 低电平有效的信号后一律加下划线和字母n。如:SysRst_n;FifoFull_n; 3. 经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。如CpuRamRd信号,经锁存后应命名为CpuRamRd_r。 低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。如CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr 多级锁存的信号,可多加r以标明。如CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。 4. 模块的命名。 在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。各模块的命名以3个字母为宜。例如: Arithmatic Logical Unit模块,命名为ALU。 Data Memory Interface模块,命名为DMI。

用verilog语言编写交通灯程序

交通灯 一、实验目的 写一个交通灯,要求: ①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30 个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。最后用modelsim软件进行仿真。 ②要求设计是一个可综合设计。 二、实验原理 根据实验要求的逻辑功能描述,可以分析得出原理图如下: 根据实验要求画出控制器的状态转移图如下:

三、代码 1、源代码 (1)控制器模块 module traffic_lights(clk,rst,count,ew,sn); input clk,rst; input[5:0] count; output[2:0] ew,sn; reg[2:0] ew,sn; reg[3:0] state; parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always @(posedge clk) if(!rst) begin state<=Idle; end else casex(state) Idle: if(rst) begin state<=s1; end s1: if(count=='d25) begin state<=s2; end s2: if(count=='d30) begin state<=s3;

end s3: if(count=='d55) begin state<=s4; end s4: if(count=='d60) begin state<=s1; end endcase always @(posedge clk) begin if(!rst) begin ew<=3'b100; sn<=3'b100; end else casex(state) Idle: if(rst) begin ew<=3'b100; sn<=3'b001; end s1: if(count=='d25) begin ew<=3'b100; sn<=3'b010; end

verilog语言代码设计规范

verilog语言代码设计规范2011年12月

目录 一、规范适用范围 ------------------------------------------------------------------------ 4 1.1项目适用范围------------------------------------------------------------------------------------- 4 1.2人员适用范围------------------------------------------------------------------------------------- 4 1.3编码设计的成果形式 --------------------------------------------------------------------------- 4 二、代码书写规范 ------------------------------------------------------------------------ 5 2.1模块说明书写规范------------------------------------------------------------------------------- 5 2.1模块注释书写规范------------------------------------------------------------------------------- 5 2.3变量名称书写规范------------------------------------------------------------------------------- 6 2.4代码结构书写规范------------------------------------------------------------------------------- 7 三、使用verilog语言的语法范围----------------------------------------------------- 8 3.1设计RTL代码的语法范围 -------------------------------------------------------------------- 8 3.2设计仿真代码的语法范围 -------------------------------------------------------------------- 10 四、使用verilog语言的结构范围---------------------------------------------------- 11 4.1系统设计文件的形式与使用方法----------------------------------------------------------- 11 4.2模块结构划分的标准 -------------------------------------------------------------------------- 12 4.3组合逻辑的代码风格 ------------------------------------------------------------------------ 13 4.4时序逻辑的代码风格 -------------------------------------------------------------------------- 21 4.5仿真代码的代码风格 -------------------------------------------------------------------------- 27 五、使用受限范围内的语法或结构要进行的申请过程-------------------------- 32 5.1受限的语法与结构------------------------------------------------------------------------------ 32 5.2批准使用的程序--------------------------------------------------------------------------------- 32

Verilog+HDL代码书写规范

1.目的 本规范的目的是提高书写代码的可读性、可修改性、可重用性,优化代码综合和仿真的结果,指导设计工程师使用VerilogHDL规范代码和优化电路,规范化可编程技术部的FPGA设计输入,从而做到:①逻辑功能正确,②可快速仿真,③综合结果最优(如果是hardware model),④可读性较好。 2.范围 本规范涉及Verilog HDL编码风格,编码中应注意的问题,Testbench的编码等。 本规范适用于Verilog model的任何一级(RTL,behavioral, gate_level),也适用于出于仿真、综合或二者结合的目的而设计的模块。 3.定义 Verilog HDL : Verilog 硬件描述语言 FSM :有限状态机 伪路径:静态时序分析(STA)认为是时序失败,而设计者认为是正确的路径。 4.规范内容 4.1.Verilog 编码风格 本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何一级(RTL,behavioral, gate_level),也适用于出于仿真,综合或二者结合的目的而设计的模块。 4.1.1. 命名的习惯 选择有意义的信号和变量名,对设计是十分重要的。命名包含信号或变量诸如出处、有效状态等基本含义,下面给出一些命名的规则。 y用有意义而有效的名字 有效的命名有时并不是要求将功能描述出来,如 For ( I = 0; I < 1024; I = I + 1 ) Mem[I] <= 32’b0; For 语句中的循环指针I 就没必要用loop_index作为指针名。 y用连贯的缩写 长的名字对书写和记忆会带来不便,甚至带来错误。采用缩写时应注意同一信号在模块中的一致性。缩写的例子如下: Addr address Pntr pointer Clk clock reset

verilog的代码规范和coding风格

verilog的代码规范和coding风格 想要成为一名优秀的数字IC设计工程师需要哪些基本的专业知识呢?如下: 1.半导体物理学、半导体器件物理学、基本的固体物理、半导体工艺与制造等物理学知识; 2.电路分析、模拟电子线路、COMS模拟集成电路、专用 集成电路基础等模拟IC知识; 3.信号系统、数字信号处理、信道编码、通信原理等通 信知识; 4.C语言、汇编、C++、脚本(shell、tcl、perl)、Linux(我觉得如果懂kernel那就更好了)、体系结构、组成原理等计算机知识; 5.各种EDA和编程调试工具的使用Modelsim、Debussy、quartus ii、Cadence、DC、vim等等(就数字方向而言 用的最多的5种左右,模拟另当别论);另外虚拟机什么的总得玩得转吧! 6.当然最重要的还是我们亲爱的--verilog,不会 verilog(当然VHDL也是一样的)那你会别的也算不上优秀的 Digital IC Engineer!verilog语法并不复杂,只是初 学者容易犯一些“类C”错误,总会不经意

间将verilog写 成了C语言,或者是没有使用并行思想,或者就是多处 赋值等等问题。如果我们克服了之前的一些小毛病,在 这 些之外,我们想更近一步提升自己的写代码水平、研发 水平,而不是只做一个码农的话那么我们要做的就是: 第一步:提高代码规范性,每个企业、研究所可能都有 自己的一套代码书写规范,但是总的来说都有一些共性,而且往往这些共性的地方还特别多,一个没有代码规范 的程序员不可能写出非常漂亮和优秀的程序,当然有了 规 范的代码后也不一定就能写出漂亮和优秀的程序,这是 两码事。代码规范之后的一个境界我觉得是优良的编程 风 格,编程风格不同于代码规范,编程风格在verilog中 特别指代那些逻辑上的风格,同样的功能,使用不同的 编 程风格,代码综合面积可能是几倍的关系,这一点我深 有体会,另外,人们不经意间的编码习惯可能会导致许 多 冗余代码,在verilog综合之后,这些冗余就会成为实 实在在多出来的不必要的电路,他们或者是寄存器或者

Verilog编码规范

Verilog编码规范 (仅供内部使用) 拟制: xxx 日期: xxx 审核:审核者日期:yyyy-mm-dd 批准:批准者日期:yyyy-mm-dd 版权所有侵权必究

修订记录

目录 1命名规范 (5) 2代码编写规范 (10) 2.1 版面 (10) 2.2 编写代码规范 (11) 3电路设计规则 (29) 3.1 时钟 (29) 3.2 复位 (31) 3.3 避免LATCH (32) 3.4 避免组合反馈 (33) 3.5 赋值语句 (33) 3.6 case语句和if-then-else语句 (33) 3.7 状态机 (34) 3.8 异步逻辑 (37) 4模块划分 (38)

5提高可移植性的编码风格 (39) 5.1 采用参数化设计 (39) 5.2 采用独立于工具平台和工艺库的设计 (40) 5.3 尽量使用已经得到验证的IP (41) 6其他一些设计建议 (42) 7附件 (45) 8参考文档: (54) 基本原则:简单,一致,可重用。 简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简 单的时钟,尽量使用简单的复位。 一致指尽量保持代码风格一致,尽量保持命名一致。 可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。

1命名规范 给信号命名就像给孩子取名字一样,有区别,有根源,有深度,还有一点,要简单,别冗长。 有区别指取名字不要一样,假如大家只有一个手机号码,那这个号码还能有什么用处? 有根源指取名字要能象姓氏一样,让人一看就直到是张家的后代而不是李家的。 有深度就是取名字要有涵义,张一,张二,张三虽然也是名字,但是请考虑一下被取名字人的感受。 简单点,几十个字母长的名字,打字的和看字的都累。 大小写规则:只有parameter,`define和module名称才能享受 大写。 Module 名应与文件名保持一致(文件名是小写),假如不想在设 计后面遇到麻烦的话。 不要尝试使用任何保留字,因为他们已经被保留了。 不要重复使用同样的名字去命名不同的数据。 (建议)对module名加”_LVx”的后缀,增强module名称的结 构层次含义

verilog书写规范

海思高校合作——QA培训资料 一、RTL CODE 规范 1.标准的文件头 在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,概要,更改记录,版权等必要信息。 统一使用以下的文件头: // ************************************************************** // COPYRIGHT(c)2005, Hislicon Technologies Co, Ltd // All rights reserved. // // IP LIB INDEX : IP lib index just sa UTOPIA_B // IP Name : the top module_name of this ip, usually, is same // as the small ip classified name just as UTOPIA // File name : file_name of the file just as “tx_fifo.v” // Module name : module_name of this file just as “TX_FIFO” // Full name : complete Emglish nme of this abbreviated // // Author : Athor/ID // Email : Author?s email // Data : // Version : V 1.0 // //Abstract : // Called by : Father Module // // Modification history // ------------------------------------------------------------------------------------------------------ // // // $Log$ // // ********************************************************************* 2. 标准的module 格式(module 整体结构) 对于模块的书写采用统一的格式便于项目内部成员的理解和维护,我们用批处理建立了一个MODULE模块,其内容解释如下: ●端口定义按照输入,输出,双向的顺序: ●模块名、模块例化名统一,例化名前加大写U_以区分(多次 例化另加标识),三者关系: 文件名:xxx .v (小写)

Verilog代码编写规范

Verilog代码编写规范 有点东东,给大家一起分享一下:********* Verilog代码编写规范 一. 强调Verilog代码编写风格的必要性。 强调Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。 每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和接受起来就困难一些。 曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在1万行数量级。代码的整洁程度,很大程度上影响着代码的维护难度。 遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相反代码编写风格随意的代码,通常晦涩、凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦。 (实际上英文Coding Style有另一层涵义,更偏重的是,某一个电路,用那一种形式的语言描述,才能将电路描述得更准确,综合以后产生的电路更合理。本文更偏重的是,编写Verilog代码时的书写习惯。)二. 强调编写规范的宗旨。 缩小篇幅 提高整洁度 便于跟踪、分析、调试 增强可读性,帮助阅读者理解 便于整理文档 便于交流合作 三. 变量及信号命名规范。 1. 系统级信号的命名。 系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以字符串Sys 开头。 2. 低电平有效的信号后一律加下划线和字母n。如:SysRst_n;FifoFull_n; 3. 经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。如CpuRamRd信号,经锁存后应命名为CpuRamRd_r。 低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。如CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr 多级锁存的信号,可多加r以标明。如CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。 4. 模块的命名。 在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。各模块的命名以3个字母为宜。例如: Arithmatic Logical Unit模块,命名为ALU。 Data Memory Interface模块,命名为DMI。 Decoder模块,命名为DEC。 5. 模块之间的接口信号的命名。

经典Verilog代码标准

一、工程建立规范: 1、工程的组成: (1)一个顶层文件夹 (2)顶层文件夹下,至少包括以下四个子文件夹 a)project文件夹:存放ISE工程文件,包括ise、bit、mac等文件 b)source文件夹:存放verilog源文件 c)explain文件件:存放注释说明文档 d)test文件夹:存放测试程序代码,可进一步分为软件调试程序、硬件调试程序 2、工程的命令: (3)定层文件夹命令为top_xxx,xxx为工程的识别名称 (4)顶层文件夹的子文件夹分别命名为:project、source、explain、test 二、RTL CODE 规范 1.标准的文件头 在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,概要,更改记录,版权等必要信息。 统一使用以下的文件头: // ************************************************************** // COPYRIGHT(c)2005, Hislicon Technologies Co, Ltd // All rights reserved. // // IP LIB INDEX : IP lib index just sa UTOPIA_B // IP Name : the top module_name of this ip, usually, is same // as the small ip classified name just as UTOPIA // File name : file_name of the file just as “tx_fifo.v” // Module name : module_name of this file just as “TX_FIFO” // Full name : complete Emglish nme of this abbreviated // // Author : Athor/ID // Email : Author?s email // Data : // Version : V 1.0 // //Abstract : // Called by : Father Module // // Modification history // ------------------------------------------------------------------------------------------------------ // //

关于VerilogHDL编写规则的说明

关于V erilogHDL编写规则的说明 摘自“Comprehensive SRS V3 Standards—Semiconductor Reuse Standard” 7 V erilog HDL 编码 7.1 前言 V erilog HDL编码标准属于虚拟部件生成一部分,用于对编码中的命名习惯、代码文档和代码格式风格的说明。对相应规则的遵从能够简化重用,并从代码中抽象出其精华,使得代码可读性增强且兼容大多数工具。除特别声明,任何与标准不一致的地方必须纠正而且以文档说明。 该标准确保在各种应用中代码的高度适应性,以此提升了重用性。本文档的目的就是确保门级实现与标准的V erilog仿真器一致。分割会影响针对应用的适应性。建模实践小节处理在综合环境中很难描述清楚而又必须确保前后综合的一致性结构。 该标准可应用于行为和综合代码。而且,还可以应用于其它的V erilog代码中如测试台、监视器等。某些标准明确说明其应用代码的类型,如有例外会标出。 所描述的规则肯定是在快速Soc设计、集成、生产及维护过程中必须的要求项。注意到在许多情况下,简单的介绍也能适应要求,但是,介绍会带来大量的例外、工具限制或一些深度的使用习惯,而这些与规则相悖。 7.1.1可交付的列表 在第2部分VC块可交付列表已经定义了IP库形式。包括: 可综合的RTL源代码(L1) 测试台(V1) 驱动(V2) 监视器(V3) 详细行为建模(V4) 短小模型(V6) 形式模型验证(V12) 7.2参考信息 7.2.1参考文档 略 7.2.2术语 基地址:偏移量相对的地址 HDL:硬件描述语言 屏蔽拴:物理上,屏蔽拴指一条连接到VDD或VSS,或者二个输入的选择输出线,用于对模块的配置而不会影响模块内部。该设置能够在更改配置时避免重综合。 PLL:锁相环 RTL: 文本宏 顶层模块:在VC设计层次中最高模块。 UDP:用户定义原语 7.3命名规则 7.3.1文件命名 R7.3.1 一个文件一个模块 一个文件最多可以有一个模块。 原因:简化设计修改。 R7.3.2 文件命名规则

verilog编程规范

用于命名的字符集为:字母A ~Z 和a ~z,数字0~9以及下划线组成。例如:data_bus data_width clk_48M 48M_clk data__bus data*bus 命名字符集 名称不能以数字开头数据总线48M 时钟信号数据位宽不能连续使用下划线不能包含非字母符号*使用有意义的名字,以利于望文生义

参数(parameter )、常量(constant )和块标号(block label )名必须一致采用大写;而信号,变量和结构名(construct )以及实例标号(instance )必须一致采用小写。有利于在仿真时,区分不变和变化的数据。 大小写规则module display_led( clk_48M, //时钟ledout //LED 输出); input clk_48M; //48M 系统时钟output [7:0] ledout; //LED 输出控制reg [22:0] count; //计数器reg [7:0] led_reg; //LED 输出缓存区wire led_clk;//LED 显示时钟控制 parameter COUNTER=100;assign led_clk = count[22]; //LED 显示时间控制 模块标号小写变量小写常量大写

在不区分大小写的情况下,名字必须唯一。例如,名字state和State不能同时出现在同一设计中,这是 因为有的EDA工具不区分大小写。 名字必须唯一 module casestatement ( a, State, state, dout ); input a; input State; input [2:0] state; output dout; reg dout; parameter STATE = 3'bx11; always @(a or b or state) case(state & State) 3'b001: dout=a&b; 3'b010: dout=a|b; endcase endmodule 输入信号 参数输入信号

verilog_coding_style

湖北光华电子有限公司 1/21 Verilog coding style Revision history Version Author Date note V1.0 shangrongjun 2011-3-23 Initial version

湖北光华电子有限公司 2/21 本文是针对编写verilog HDL 代码提出的一些需要遵循的规范,在满足功能和性能的前提下,增强代码的可读性和可移植性等。 目的: 1. 不依赖个人的技术水平,确保电路可靠性和稳定性。 2. verilog 描述正确,确保综合后的电路与预期的功能一致,防止由于不正确的语句使用导致功能错误。 3. 提高自己或其他人维护或调试代码的效率。 如果写了风格差的代码,不符合上述三点,则会: 1. 如果rtl 描述的电路稳定性不好,则会 (1) 增加了不必要的设计、验证周期。 (2) 为了达到稳定电路,重新设计浪费时间。 2. 如果rtl 描述风格不好,则会 (1) 综合出错,需要重新修改,综合的时间浪费,eda 工具的使用时间浪费(正版)。 (2) 用lint 工具检查时warning 以及error 很多,可能掩盖了真正的错误,而去掉这些warning 和error 信息还需要修改代码。 (3) 仿真的时间浪费,Eda 工具的使用时间浪费。 3. 调试或维护时: (1) 个人风格导致其他人没法看懂,很难维护,发现维护代码还不如重新写一遍。 (2) 代码难看懂,很难调试,基本上只能编写人自己调试。

湖北光华电子有限公司 3/21 1. 命名规则 (1) 在module 名和文件名的开始标明该module 和文件上层模块的功能或名字。 这样的目的是为了整个项目合成时不同模块的名字有冲突,即使单个模块仿真通过,总体连接到一块时仍会出错。 例:codec 项目中有adc 和dac ,均有各自cic 模块,则需要在相应的cic 前加上各自的模块名,如:adc_cic.v, dac_cic.v 。如果都用cic.v ,单独模块仿真没有问题,但整体连接起来仿真、综合均会出错。 include 的头文件的扩展名不能为.v, 而应该为.h, .vh, .inc 等。 (2) 每个module 用一个单独文件实现,不要将多个module 的定义写在一个文件里面(库文件除外)。 这样的目的是为了方便调试或修改时查找相应的模块,如果某个模块的名字在另一个名字的文件里,搜索比较困难,换成第三者去调试时更会浪费时间。 (3) module 命名只能用大小写字母[A-Z,a-z ]、数字[0-9]和下划线[_]构成,第一个字符应为字母,结尾为字母或数字,不可出现连续下划线,也不要以 下划线结尾。 例:Good style :counter ,wr_addr_1, dat_in_dly1 Bad style :9_data, wr__addr, wr_addr_ (4) 所有的信号(reg ,wire ,inout ,input ,output )都使用小写字母,并且信号名字能表明其代表的意义。 例:reg [9:0] l ine_pixel_cnt; 避免:reg [9:0] cnt; 而一般采用以下的一些缩写代表常用信号的意义: Abbreviation Full word addr address cfg config ctl control cur current

Verilog HDL 入门教程(华为)

文档中心 文档编号 资源类别: HDL语言版本 1.0 密级 内部公开 共41页 Verilog HDL入门教程(仅供内部使用) 拟制: 批准: 批准: 中研基础 中研基础 日期:

日期: 日期: 2004.8.3 yyyy/mm/dd 版权所有不得复制 Verilog HDL 入门教程绝密请输入文档编号日期 2004.8.3 修订版本 1.00 描述 初稿完成 修订记录 作者

2004-08-16 第2页,共41页版权所有,侵权必究 Verilog HDL 入门教程 绝密请输入文档编号 目录 1 前 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 HDL设计方法学简 介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1 数字电路设计方 法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 硬件描述语 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

相关文档
最新文档