verilog代码风格——PN序列产生代码

在编写Verilog代码时注意以下点:

1 、同一个模块中不同变量的赋值放在不同的always块里(这样可以便于程序的调试),一个always块的代码

       尽量不要超过十行。

2、同一个变量的赋值不能放在多个always块中,只能放在同一always块

2、复位信号一定要干净,尽量不要与其他的信号进行逻辑运算

3、利用时钟信号(clk)和复位信号(rst)做触发,尽量避免用中间变量的上升或者下降沿触发

示例代码如下(PN序列的产生):

//---------------------------------------------------------------------------------------------------

//-- Project name  : DTMB 1.0 IP Development

//-- Filename        : dtmb_pn_gen.v

//-- Called by        : dtmb_pn_gen.v

//-- Description    : DTMB fine channle estimation

//-- Moficiation History :

//-------------------------------------------------------------------------------------------

//--     Date           |        By                     |  Version  |  Change Description

//-------------------------------------------------------------------------------------------

//--  2014-07-24 |    Zhenzhen Peng |    0.2    |  Second   Version

//----------------------------------------------------------------------------------------------

`timescale 1ns/10fs

modulepn_module2_m_function

(

// input

i_clk_x16g                , // x16 clock, Gated 120.96MHz

i_rst_n                       , // Negative reset for all EQ

i_m_intiphase         , // Initial phase

i_pn_mode              , // 0->255, 1->1023, 2->511, 3->x

i_pn_length             , // 0->420, 1->595, 2->945, 3->x

i_module2_start     , // PN start signal

o_pn_gen_en          , // PN seq out enable

o_pn_gen_start       , // PN start signal

o_pn_gen_seq         , // PN sequence: 0->+PN , 1->-PN

o_module2_count    // control the output signal

);

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

// Parameter

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

parameter    D_W = 12,

output_lenght=2048  ; // output data lenght

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

// Interface definition

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

input                     i_clk_x16g            ; // x16 clock, Gated 120.96MHz

input                     i_rst_n                   ;
// Negative reset for all EQ

input   [    1 : 0]    i_pn_mode           ;
// 0->420, 1->595, 2->945, 3->x

input   [    9 : 0]    i_m_intiphase      ;
// the PN initial phase

input                     i_module2_start  ; // pn_module2_m_function module start signal

input   [    9 : 0]    i_pn_length           ;
// 0->420, 1->595, 2->945, 3->x

// output

output                 o_pn_gen_start        ; // PN start signal

output                 o_pn_gen_en           ;
// PN seq out enable

output  [D_W-1 : 0] o_pn_gen_seq   ;
// PN sequence: 0->+PN , 1->-PN

output  [   11 : 0]  o_module2_count  ; // control the output signal

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

// Behavior

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

reg                                    o_pn_gen_start       ;

reg                                    o_pn_gen_en          ; // PN seq out enable

reg signed [D_W-1 : 0] o_pn_gen_seq        ; // PN sequence: 0->+PN , 1->-PN

reg        [   11 : 0]             o_module2_count  ; // control the output signal of o_m_out,o_module2_over

reg                      m_flag           ;
// m_flag=1, the shifting register is working

reg                      m_out            ; // the output bit value

reg     [    9 : 0]    m_Init           ; // shifting register

// m_flag

always @(posedge i_clk_x16g or negedge i_rst_n)
//a clk delay use to delivery the phase

begin                                    

  if(!i_rst_n)  m_flag<=0;

 else if(i_module2_start) m_flag<=1;

else m_flag<=0;

end

 

// o_module2_count

always @(posedge i_clk_x16g
or negedge i_rst_n)

begin

if(!i_rst_n)  o_module2_count<=0;

else if (m_flag )o_module2_count<=o_module2_count+1;

else o_module2_count<=0;

end

// o_pn_gen_start

always @(posedge i_clk_x16g
or negedge i_rst_n)

begin

 if(!i_rst_n)  o_pn_gen_start <=0;

else if(m_flag) begin

 if(o_module2_count==1)  o_pn_gen_start <=1;

else o_pn_gen_start <=0;

end  

end

//o_pn_gen_en

always @(posedge i_clk_x16g
or negedge i_rst_n)

begin

 if(!i_rst_n)  o_pn_gen_en <=0;

 else if(m_flag) begin

 if(o_module2_count==1)o_pn_gen_en <=1;

 if(o_module2_count==output_lenght+1)o_pn_gen_en <=0;

end

end

//o_pn_gen_seq

always @(posedge i_clk_x16g or negedge i_rst_n)

begin

if(!i_rst_n) o_pn_gen_seq<=0;

 else if(o_module2_count)                                       // output_lenght 2048

  if(o_module2_count<=i_pn_length)

    begin

         if(m_out==1) o_pn_gen_seq<=-362; //BPSK mapper: 1—> -1  0—>1  then QPSK mapper:(sqrt(2)/2 )*(1+i),and(12,2,t)quantitative,
so is 362

//the Real data is similar to the imaginary data

         else
o_pn_gen_seq<=362;

 end

else o_pn_gen_seq<=0;

end

//m_Init

//m_out

always @(posedge i_clk_x16g
or negedge i_rst_n)

begin

 if(!i_rst_n)begin

m_Init<=0;

m_out<=0;

end 

 else begin
//m sequence generator

 if(!m_flag && i_module2_start) m_Init<=i_m_intiphase;

 else if(o_module2_count<=i_pn_length)

 case(i_pn_mode)//0->PN420, 1->PN595, 2->PN945

2‘b00:  begin //255

m_out <=m_Init[7];

m_Init<= {m_Init[6:0],m_Init[7]^m_Init[5]^m_Init[4]^m_Init[0]};

end

2‘b01:  begin
//1023

m_out <=m_Init[9];

m_Init <= {m_Init[8:0],m_Init[9]^m_Init[2]};

         end

2‘b10:         begin//511

m_out <=m_Init[8];

m_Init <= {m_Init[7:0],m_Init[8]^m_Init[7]^m_Init[6]^m_Init[1]};

         end

             endcase               

    end

end

endmodule         

verilog代码风格——PN序列产生代码

时间: 2024-10-18 15:23:36

verilog代码风格——PN序列产生代码的相关文章

.net 代码风格规范

声明:内容非原创,转自张子阳博客. 对于为什么是转载,唯一原因就是这东西居然比我整理的好,直接用得了. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,则不需要加注释:否则必须添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文是不符合要求的. 唯一可以使用中文的地方是

.NET之美——.Net 项目代码风格要求

.Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单

项目代码风格要求

1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,则不需要加注释:否则必须添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文是不符合要求的. 唯一可以使用中文的地方是枚举的枚举项,枚举项实际已经不属于本节标题的范畴了.这里只是放到一起说明,如下图所示: 1.3 不使用缩

奇舞js笔记——第2课——代码风格

注: 1.学习视频地址 2.ppt地址 3.个人感想: 是我hin厉害的师父推荐我看的月影大大的视频,感觉对于我这个小白来说,真的是一遍又一遍的刷新知识面.我觉得像月影大大这种大佬的思路,我接触之后真的是受益匪浅. 所以我总结出来不仅是自己记笔记,也是想分享给想要成为真正的前端“工程师”的前端er. 真的很珍惜这种知识面被刷新的感觉——越学习,越感到自己无知,共勉. 目录 1.代码风格存在的意义 2.代码风格是什么 3.遵守怎样的代码风格 4.怎样学习代码风格 5.一些特殊的代码风格:IIFE,

.Net 项目代码风格要求

.Net 项目代码风格要求 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文是不符合要求的.

.Net 项目代码风格规范

最近没啥时间自己状态也不是很好,公司的事情忙,自己也有一些事情要处理,所以好久没有写博客了.利用公司午休时间写一写,以下是参考了一些资料,整理出来,共勉之. 代码风格没有正确与否,重要的是整齐划一,清晰易读. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优

.Net 项目代码风格参考

1. C#代码风格要求 1.1 注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文是不符合要求的. 唯一可以使用中文的地方是枚举的枚举项,枚举项实际已经不属于本节标题的范畴了.这里只是放到一起说明,如下图所示: 1.3 不使用缩写

C# 代码风格要求

1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,则不需要加注释:否则必须添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文是不符合要求的. 唯一可以使用中文的地方是枚举的枚举项,枚举项实际已经不属于本节标题的范畴了.这里只是放到一起说明,如下图所示: 1.3 不使用缩

浅谈代码风格及代码中封号问题

(1)代码风格案例如下: (2)代码风格: 为约定代码风格,在社区中规定了代码规范 JS常用代码风格规范有2种 JavaScript Standard Style标准风格 Airbnb JavaScript Style爱彼迎风格 官网: 注意: 三种情况必须加封号,除非之前没有代码,在第一行.但也有可能合并代码,出现问题 即IIFE自执行函数.数组操作.模板操作等... ...,如下所示 1.IIFE 2.数组操作 3.字符串模板 结果报错 了解字符串模板 . 原文地址:https://www.