可综合verilog用法总结

1、给mudule按照数组例化

模块 b 中实例化一个模块 a 的数组实例,并将所有实例的端口连接到单一的 wire 信号;

复制代码
module a (
    input wire [4:0] data_in,
    output wire [4:0] data_out
);
    // 简单的功能实现:将输入信号直接传递到输出
    assign data_out = data_in;
endmodule
复制代码
module b;
    // 定义单个 5 位宽的 wire 信号
    wire [4:0] in;
    wire [4:0] out;

    // 实例化 6 个 a 模块,使用数组例化
    a a_inst [5:0] (
        .data_in(in),     // 将所有实例的 data_in 连接到相同的 in 信号
        .data_out(out)    // 将所有实例的 data_out 连接到相同的 out 信号
    );


endmodule

2、有符号数$signed的使用

2.1:信号定义

可以先试用signed给变量定义,如:wire signed 14:0 pos_index ;

2.2:把无符号数转化为有符号数

如有信号,input 13:0 un_signal; 可以利用signed 转化为有符号数,wire signed \[13:0\] un_signal_tmp; assign un_signal_tmp = signed(un_signal);

2.3如果在进行有符号数运算时,给操作数带上了位宽,可能会导致意料之外的结果,尤其是在处理有符号数时;

假设你有两个 10 位的有符号数 bc,并且你希望将它们相加:

复制代码
wire signed [10:0] a;
wire signed [9:0]  b;
wire signed [9:0]  c;
assign a = b[9:0] + c[9:0];

有符号数的截位问题:

  • 在上面的代码中,b[9:0]c[9:0] 是 10 位宽的信号,但它们被当作 10 位宽的无符号数进行处理。
  • Verilog 的位选择操作符 [9:0] 表示选择指定范围的位,通常用于位截取。当你写 b[9:0] 时,编译器将其解释为一个 10 位宽的信号,这个信号可能被看作无符号的,特别是在没有明确声明其符号的情况下。
  • attention:如果a上述代码是assign a10:0 = b + c;那么这个结果就是对的;

3、位宽溢出问题的考虑

3.1、对于乘法器,一个3bit乘3bit,然后赋值给4bit,会出现等式右边会出现溢出吗?--不会的

在实际综合中,综合工具会将乘法结果自动扩展到足够宽的位宽,以匹配目标寄存器或信号的宽度。在这个例子中,乘法结果被正确地存储到 6 位宽的寄存器中,不会溢出。

相关推荐
V哥AI增长8 小时前
小红书笔记在生成式AI引擎中的可见性机制解析:从抓取原理到GEO工程化实践
大数据·人工智能·笔记
Hotchip_MEMS12 小时前
当雾化器遇上MEMS:一场从交互到制造的全链路效率提升
人工智能·笔记·物联网·电脑·制造
是上好佳佳佳呀12 小时前
【深度学习|Day02】PyTorch 深度学习笔记(下):张量运算与自动微分
pytorch·笔记·深度学习
IT古董14 小时前
【MES学习笔记系列】05 - MES 数据库设计
笔记·学习·mes
不瘦80斤不改名15 小时前
05-vibe-coding-向agentic-engineering演进
人工智能·笔记·python·prompt
九硕智慧建筑一体化厂家15 小时前
直流照明|无尘风淋室照明,高均匀无频闪,适配洁净车间高频合规工况
大数据·人工智能·笔记·智慧城市
LATASA15 小时前
【 从0到1构建 Agent Harness学习笔记】
网络·笔记·学习
FakeOccupational16 小时前
【电路笔记 仿真】SPICE仿真器软件 LTspice:绘制简单电路(新建图页+添加组件)并仿真+模型导入+SUBCKT (子电路)绘制与使用+特殊器件绘制
笔记
是上好佳佳佳呀17 小时前
【深度学习|Day01】PyTorch 深度学习笔记(上):框架认知与张量基础
pytorch·笔记·深度学习
x173880627317 小时前
目录遍历漏洞
笔记·目录遍历漏洞