• Verilog参数、Verilog参数和属性冲突、整数处理


    Verilog参数

    Verilog参数执行以下操作:

    •允许您创建易于重用和扩展的参数化代码。

    •使代码更可读、更紧凑、更易于维护。

    •将此类功能描述为:

    ○ 总线尺寸

    ○ 建模设计单元中某些重复元素的数量

    •是常数。对于参数化模块的每个实例化,默认运算符值可以被覆盖。

    •相当于VHDL泛型。不支持空字符串参数。

    使用Generics命令行选项重新定义在顶级中定义的Verilog参数设计块。这允许您在不修改源代码的情况下修改设计。这该功能对IP核心生成和流测试非常有用。

    参数示例(Verilog)

    从编码示例下载编码示例文件。

    Filename: parameter_1.v
    // A Verilog parameter allows to control the width of an instantitated
    // block describing register logic
    //
    //
    // File:parameter_1.v
    //
    module myreg (clk, clken, d, q);
    parameter SIZE = 1;
    input clk, clken;
    input [SIZE-1:0] d;
    output reg [SIZE-1:0] q;
    always @(posedge clk)
    begin
    if (clken)
    q <= d;
    end
    endmodule
    module parameter_1 (clk, clken, di, do);
    parameter SIZE = 8;
    input clk, clken;
    input [SIZE-1:0] di;
    output [SIZE-1:0] do;
    myreg #8 inst_reg (clk, clken, di, do);
    endmodule

    参数和生成示例(Verilog)

    以下编码示例说明了如何使用控制重复元素的创建参数并为构造生成。有关详细信息,请参阅生成语句。

    文件名:parameter_generate_for_1.v

    //
    // A shift register description that illustrates the use of parameters and
    // generate-for constructs in Verilog
    //
    // File: parameter_generate_for_1.v
    //
    module parameter_generate_for_1 (clk, si, so);
    parameter SIZE = 8;
    input clk;
    input si;
    output so;
    reg [0:SIZE-1] s;
    assign so = s[SIZE-1];
    always @ (posedge clk)
    s[0] <= si;
    genvar i;
    generate
    for (i = 1; i < SIZE; i = i+1)
    begin : shreg
    always @ (posedge clk)
    begin
    s[i] <= s[i-1];
    end
    end
    endgenerate
    endmodule

    Verilog参数和属性冲突

    Verilog参数和属性冲突可能是由于以下原因引起的:

    •参数和属性可以应用于Verilog代码中的实例和模块。

    •属性也可以在约束文件中指定。

    Verilog使用限制

    Vivado合成中的Verilog使用限制包括以下内容:

    •区分大小写

    •阻塞和非阻塞分配

    •整数处理

    区分大小写

    Vivado synthesis支持Verilog区分大小写,尽管存在名称冲突的可能性。

    •由于Verilog区分大小写,因此模块、实例和信号的名称可以理论上通过改变资本化而变得独特。

    ○ Vivado合成可以合成实例和信号名称仅相差资本化。

    ○ 当模块名称仅因大写而不同时,Vivado合成会出错。

    •不要仅依靠大写来使对象名称唯一。单独的资本化可以导致混合语言项目出现问题。

    阻塞和非阻塞分配

    Vivado合成支持阻塞和非阻塞分配。

    •请勿混合分配阻塞和非阻塞。

    •尽管Vivado合成在没有错误的情况下合成了设计,但混合阻塞和非阻塞分配可能会在模拟过程中导致错误。有关Vivado模拟的Verilog格式的更多信息,请参阅Vivado设计套件用户指南:逻辑仿真(UG900)。

    不可接受的示例一

    不要对同一信号的不同比特混合块和非块分配。

    always @(in1)
    begin
    if (in2)
    out1 = in1;
    end else
    out1 <= in2;
    Unacceptable Example Two
    Do not mix blocking and non-blocking assignments for different bits of the same signal.
    if (in2)
    begin
    out1[0] = 1'b0;
    out1[1] <= in1;
    end else begin
    out1[0] = in2;
    out1[1] <= 1'b1;
    end

    整数处理

    Vivado合成在某些情况下处理整数的方式与其他合成工具不同。在里面在这些情况下,整数必须以特定的方式进行编码。

    Verilog案例语句中的整数处理

    不带大小写的整数,以防项表达式可能导致不可预测的结果。Verilog案例语句中的整数处理示例在下面的编码示例中,事例项表达式4是一个未大小的整数,它导致不可预测的结果。要解决此问题,请将事例项表达式的大小调整为4到3位,如中所示以下示例:

    reg [2:0] condition1; always @(condition1) begin
    case(condition1)
    4 : data_out = 2; // Generates faulty logic
    3'd4 : data_out = 2; // Does work
    endcase
    end

    连接中的整数处理

    Verilog串联中的无符号整数可能会导致不可预测的结果。如果您使用表达式,它会执行以下操作:

    •将表达式指定给临时信号。

    •在级联中使用临时信号。

    reg [31:0] temp;
    assign temp = 4'b1111 % 2;
    assign dout = {12/3,temp,din};

    Verilog-2001属性和元评论

    Verilog-2001属性

    •Verilog-2001属性将特定信息传递给合成工具等程序。

    •Verilog-2001属性被普遍接受。

    •在模块声明中,为运算符或信号的任何位置指定Verilog-2001属性和实例化。

    •尽管编译器可能支持其他属性声明,但Vivado synthesis会忽略他们

    •使用Verilog-2001属性设置以下方面的约束:

    ○ 单个对象,例如:

    单元

    例子

    ○ 设置以下合成约束:

    -完整案例

    -平行案例

    Verilog元注释

    •Verilog元注释可由Verilog解析器理解。

    •Verilog元注释设置了对单个对象的约束,例如:

    ○ 单元

    ○ 例子

    ○ 网

    •Verilog元注释设置合成指令:

    ○ 并行(_C)和完全(_C

    ○ translate_on和translate_off

    ○ 所有特定于工具的指令(例如,syn_shareing)

    Verilog元评论支持

    Vivado合成支持:

    •C风格和Verilog风格的元评论:

    ○ C样式

    /* ...*/

    •C型注释可以是多行:

    ○ Verilog风格

    // ...

    Verilog风格的注释在行的末尾。

    •关闭和打开翻译

    // synthesis translate_on
    // synthesis translate_off
    • Parallel Case
    // synthesis parallel_case full_case
    // synthesis parallel_case
    // synthesis full_case
    • Constraints on individual objects
    Verilog Meta Comment Syntax
    // synthesis attribute [of] ObjectName [is] AttributeValue
    Verilog Meta Comment Syntax Examples
    // synthesis attribute RLOC of u123 is R11C1.S0
    // synthesis attribute HUSET u1 MY_SET
    // synthesis attribute fsm_extract of State2 is "yes"
    // synthesis attribute fsm_encoding of State2 is "gray"
  • 相关阅读:
    DIFM网络详解及复现
    英语学习工具推荐
    使用easyexcel将图片批量写入excel
    3561-24-8|荧光染料6-fam(Br4)|可作为成像剂
    CSS3 动画
    本科java菜鸡,分享腾讯菜鸟京东面试经历
    线性代数学习笔记10-3:奇异值分解SVD(从四个子空间角度理解)
    文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于优先指数的配电网分布式储能序次规划》
    nginx学习笔记
    FineReport功能实现方法规范
  • 原文地址:https://blog.csdn.net/cckkppll/article/details/136406469