verilog code slice学习成长纪念

//=== 1.high pulse to(2) high level
`ifndef DLY
`define DLY 1
`endif
//only for sync clk signal.
module PUL2LVL_H (/*autoarg*/
    //Inputs
    clk_bus, brst_n, sig_in, 

    //Outputs
    sig_out);

parameter  DW = 10;

input  clk_bus;//clock
input  brst_n;//reset
input  sig_in;
output  sig_out;
reg  [DW-1:0]     sig_dly;
wire              sig_out;    

always @(posedge clk_bus or negedge brst_n) begin
    if (!brst_n) begin
        sig_dly[DW-1:0] <= #`DLY ‘b0;
    end
    else begin
        sig_dly[DW-1:0] <= #`DLY {sig_dly[DW-2:0],sig_in};
    end
end
assign sig_out = |sig_dly | sig_in;
endmodule

//最初写过的生涩的code,仅此保留已做纪念。
//replace keyword
//eg:r_keyword_p2l_cnt -> r_aaaa_p2l_cnt
////================= fresh version
//reg [6:0] r_keyword_p2l_cnt;
//reg r_keyword_hl;
//wire w_keyword_p2l_cnt_eq_keyword_size_1;
//assign w_keyword_p2l_cnt_eq_keyword_size_1 = r_keyword_p2l_cnt == w_keyword_size_1;
//always @(posedge i_clk or negedge i_rst_n)begin
//    if (!i_rst_n) begin
//        r_keyword_hl <= 1‘b0;
//    end
//    else begin
//        if(i_keyword_condition) begin
//            r_keyword_hl <= 1‘b1;
//        end
//        else if(w_keyword_p2l_cnt_eq_keyword_size_1) begin
//            r_keyword_hl <= 1‘b0;
//        end
//        else begin
//            r_keyword_hl <= r_keyword_hl;
//        end
//    end
//end
//always @(posedge i_clk or negedge i_rst_n)begin
//    if (!i_rst_n) begin
//        r_keyword_p2l_cnt <= 7‘h0;
//    end
//    else begin
//        if(w_keyword_p2l_cnt_eq_keyword_size_1)begin
//            r_keyword_p2l_cnt <= 7‘h0;
//        end
//        else if(r_keyword_hl)begin
//            r_keyword_p2l_cnt <= r_keyword_p2l_cnt + 1‘b1;
//        end
//        else begin
//            r_keyword_p2l_cnt <= r_keyword_p2l_cnt;
//        end
//    end
//end
////================= 

//=== 2.delay match, this style is suitable for >10 delay (not usually use)
//dly延迟很简单,直接打寄存器,不需要这么复杂。以下code仅做纪念。
////replace: _keyword _condition1 _condition2
////eg: j_keyword -> j_aaaaaaaa
//localparam DELAY_keyword = 19;
//genvar j_keyword;
//generate
//    for(j_keyword = 0; j_keyword < DELAY_keyword; j_keyword= j_keyword + 1)begin:dly_keyword
//        reg r_keyword_delay;
//        if(j_keyword == 0)begin
//            [email protected](posedge i_clk or negedge i_rst_n)
//            if(!i_rst_n)begin
//                r_keyword_delay <= 1‘d0;
//            end
//            else begin
//                dly_keyword[j_keyword].r_keyword_delay <= i_keyword;
//            end
//        end
//        else begin
//            [email protected](posedge i_clk or negedge i_rst_n)
//            if(!i_rst_n)begin
//                r_keyword_delay <= 1‘d0;
//            end
//            else begin
//                dly_keyword[j_keyword].r_keyword_delay <= dly_keyword[j_keyword-1].r_keyword_delay;
//            end
//        end
//    end
//endgenerate
////choose a specified delay from a delay array according to a condition
//reg r_keyword_dly;
//always @(posedge i_clk or negedge i_rst_n)begin
//    if (!i_rst_n) begin
//        r_keyword_dly <= 1‘d0;
//    end
//    else begin
//        if(i_condition1) begin
//            r_keyword_dly <= dly_keyword[PAR_condition1 -1].r_keyword_delay;
//        end
//        else if(i_condition2) begin
//            r_keyword_dly <= dly_keyword[PAR_condition2 -1].r_keyword_delay;
//        end
//    end
//end

//=== 3.produce a rise edge of a given signal
//replace _keyword
wire w_keyword_rsdg ;
reg r_keyword_r1 ;
always @(posedge i_clk or negedge i_rst_n)begin
    if (!i_rst_n) begin
        r_keyword_r1 <= 1‘b0;
    end
    else begin
        r_keyword_r1 <= w_keyword;
    end
end
assign w_keyword_rsdg = w_keyword & !r_keyword_r1;

有符号数相加要把位宽补齐再加(verilog-1995)

wire[7:0] a, b;
wire[8:0] sum1;
wire[9:0] sum2;
assign sum1 = {a[7],a} + {b[7],b};
assign sum2 = {sum1[8],sum1} + 10‘d23;

若为verilog-2001,可直接用signed关键字

wire signed [7:0] a, b;
wire signed [8:0] sum1;
wire signed [9:0] sum2;
assign sum1 = a + b;
assign sum2 = sum1 + 10‘d23;

其实对于硬件,没有符号这么一说,都是二进制数。使用verilog-1995写法更通用。

Q:why design compiler 2010 think this is not right?
A:Because i_wghtGridH is a variable.
integer i,j;
always @(posedge i_clk or negedge i_rst_n)begin
    if(!i_rst_n)begin
        for(i = 0; i < i_wghtGridH; i = i + 1)begin
            for(j = 0; j < i_wghtGridW; j = j + 1)begin
                r_WeightoNWeights0a[i][j] <= 5‘d0;
            end
        end
    end
    else begin
        r_WeightoNWeights0a[texel_cnt_y_r2][texel_cnt_x_r2] <= w_WeightoNWeights0;
    end
end
//This is ok.
reg [4:0] r_WeightoNWeights0a [7:0][7:0];
integer i,j;
always @(posedge i_clk or negedge i_rst_n)begin
    if(!i_rst_n)begin
        for(i = 0; i < 8; i = i + 1)begin //num_plp can use wire ??
            for(j = 0; j < 8; j = j + 1)begin
                r_WeightoNWeights0a[i][j] <= 5‘d0;
            end
        end
    end
    else begin
        r_WeightoNWeights0a[texel_cnt_y_r2][texel_cnt_x_r2] <= w_WeightoNWeights0;
    end
end

原文地址:https://www.cnblogs.com/luoyanghero/p/5419152.html

时间: 2024-10-01 07:29:10

verilog code slice学习成长纪念的相关文章

EF Code First学习笔记

EF Code First学习笔记 初识Code First EF Code First 学习笔记:约定配置 Entity Framework 复杂类型 Entity Framework 数据生成选项DatabaseGenerated Entity Framework 并发处理 EF Code First 学习笔记:关系 Entity Framework Code First级联删除 EF Code First 学习笔记:表映射 EF Code First学习笔记:数据库创建 Entity Fr

深度学习成长的烦恼

深度学习成长的烦恼 [编者按]深度学习尽管对当前人工智能的发展作用很大,然而深度学习工作者并非一帆风顺.Chris Edwards发表于Communications of the ACM的这篇文章,通过不同的深度学习研究人员的现身说法,列举了深度学习在不同场景下面临的一些挑战以及目前的解决方案.CSDN翻译此文,希望对国内深度学习从业者有借鉴意义. 理论和计算机硬件的进步促使神经网络成为在线服务的核心部分,如微软的Bing,采用神经网络驱动图像搜索和语音识别系统.这些公司提供这样的能力是希望在未

Entity Framework Code First学习系列

Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012,在数据库方面Entity Framework Code First在Entity Framework 5.0仅支持MS SQL Server数据库.在接下来的随笔中,均使用项目名称为Portal的控制台应用程序为例.具体的系统学习目

Code Review学习

目录 0. 引言 1. 代码检视的指导思想 2. 代码检视的内容 0. 引言 代码检视(Code Review)是指软件开发人员在完成代码设计.编写.调试后展开的个人或群体性的代码阅读过程,代码检视的目的是发现代码中的设计问题.格式问题.逻辑问题.语法问题等,从而保证代码的高质量交付.从软件工程的角度讲,在代码检视阶段发现代码问题的成本是低廉的,所以严格认真的执行代码检视过程,是提升产品质量,降低产品维护成本的有效手段 Relevant Link: http://www.distorage.co

iOS Code Signing 学习笔记&lt;转写&gt;

最近看了objc.io上第17期中的文章 <Inside Code Signing> 对应的中文翻译版 <代码签名探析> ,受益颇深,对iOS代码签名机制有了进一步的认识.想了解详细内容建议大家还是去看原文好了. 下面是对此文章的理解再结合自己之前对该部分的认识写出的学习笔记.本文的前提是已经对非对称加密有了一定的了解. 一.数字签名(digital signature) 对指定信息使用哈希算法,得到一个固定长度的信息摘要,然后再使用 私钥 (注意必须是私钥)对该摘要加密,就得到了

【51CTO学院三周年】--学习成长之路

2014年5月9日,我注册了51cto学院,成为了学院的会员.眨眼间,匆匆三年如白驹过隙,一路上留下了许多印记.从懵懂不知所措,到信手拈来的成竹在胸,成长之路,感慨良多. 认识学院,王佩丰老师的课程是我的引路人.说来好笑,自从老师说把课程转移到51cto学院这个阵地以来,我也不由自主的跟着老师,一同踏入了这个为梦想增值的知识阵地.拥有了王老师的整套课程,手把手商务PPT课程.数据透视表课程,当然不会少了我的入门课程excel2010系列课程.一路以来,非常的珍惜学习的每个日子,看着自己一步一步的

一直在路上——记我从初中到本科近十年的学习成长历程

大学之前:一个偏科生的自述 我出生自鄂东(湖北省东部的黄冈市)的一个农村,我们镇位于湖北与安徽的交界,刚好在大别山主峰之一的天堂寨脚下.我们那山比较多也都比较高,小时候记忆里那里交通相当不发达,整个县城没有火车站也没有高速公路,直到我上大一时还要坐三四个小时的大巴走省道.县道一路颠簸去相隔不到100公里的武汉乘火车. 我小学初中是在村里的学校度过的,现在想想那时候的条件真的是惨不忍睹.那时候正赶上读书人多的年代,一个教室全部都坐满了,大概有七八十人.我初中就过上了寄宿生活,一个不到二十平米的宿舍

EF Code First学习

1. Code First : 代码优先, 然后根据代码创建数据库: code first的核心是 约定: 2.EF要求 一个类 必须有一个键属性. 规则约定 如果一个属性名为id 或 类名+id, 这一属性 就自动配置为键. 约定 不是必须, 如果不遵从约定 就必须使用 一些配置. 3.code first 使用配置 有两种方法(1).Data Annotations (数据注解)  (2).Fluent API  ; 允许配置各种属性. 关系.继承.级别和数据库映射. (1).Data An

EF Code First 学习笔记:关系

一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的关系,自动为我们生成外键.观察下面的类: public class Destination { public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; s