当前位置:首页 > > 21ic电子网
[导读] 1、前言 之前在公司负责制定代码规范,费了九牛二虎之力,终于整理出来一份文档。由于保密规定的缘故,无法与大家直接分享这份文档。但是,文档中的大部分规范都是我自己长期总结出来的,在这里也与大家分享一下。2、代码示范为求直观,首先贴上一份示范代码,然后我再进行逐条详细解释。以下代码...

什么是良好的Verilog代码风格?


 1、前 言 


之前在公司负责制定代码规范,费了九牛二虎之力,终于整理出来一份文档。由于保密规定的缘故,无法与大家直接分享这份文档。但是,文档中的大部分规范都是我自己长期总结出来的,在这里也与大家分享一下。


2、代码示范


为求直观,首先贴上一份示范代码,然后我再进行逐条详细解释。以下代码是我之前做的一个同步FIFO模块,代码如下:

001

//======================================================

002

// Copyright (C) 2015 By Kellen.Wang

003

// mail@kellen.wang, All Rights Reserved

004

//======================================================

005

// Module : sync_fifo

006

// Author : Kellen Wang

007

// Contact : kellen.wang124@gmail.com

008

// Date : Jan.17.2015

009

//=======================================================

010

// Description :

011

//========================================================

012

module sync_fifo #(

013

 parameter DEPTH = 32,

014

 parameter DATA_W = 32

015

) (

016

 input wire clk ,

017

 input wire rst_n ,

018

 input wire wreq ,

019

 input wire [DATA_W-1:0] wdata ,

020

 output wire full_flg ,

021

 input wire rreq ,

022

 output wire [DATA_W-1:0] rdata ,

023

 output wire empty_flg

024

);

025

`ifdef DUMMY_SYNC_FIFO

026

assign full_flg = 1'd0;

027

assign rdata = 32'd0;

028

assign empty_flg = 1'd0;

029

`else

030

`include "get_width.inc"

031

//====================================================

032

// Constant Definition :

033

//===================================================

034

localparam DLY = 1'd1;

035

localparam FULL = 1'd1;

036

localparam NOT_FULL = 1'd0;

037

localparam EMPTY = 1'd1;

038

localparam NOT_EMPTY = 1'd0;

039

localparam ADDR_W = get_width(DEPTH-1);

040

//==================================================

041

// Variable Definition :

042

//==================================================

043

reg [ADDR_W-1:0] waddr;

044

reg [ADDR_W-1:0] raddr;

045

wire [ADDR_W-1:0] waddr_nxt;

046

wire [ADDR_W-1:0] raddr_nxt;

047

//==================================================

048

// Logic Design :

049

//==================================================

050

assign waddr_nxt = waddr  1;

051

assign raddr_nxt = raddr  1;

052

assign full_flg = (waddr_nxt == raddr)? FULL : NOT_FULL;

053

assign empty_flg = (waddr == raddr)? EMPTY : NOT_EMPTY;

054

assign iwreq = wreq
21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭