数码管动态显示——实现595控制模块


前言

将静态rtl中的595控制模块复制到动态rtl文件夹中,即完成595控制模块的复用。
在这里插入图片描述


一、代码

module  top_seg_595
(
    input   wire            sys_clk     ,   //系统时钟,频率50MHz
    input   wire            sys_rst_n   ,   //复位信号,低电平有效

    output  wire            stcp        ,   //输出数据存储寄时钟
    output  wire            shcp        ,   //移位寄存器的时钟输入
    output  wire            ds          ,   //串行数据输入
    output  wire            oe              //输出使能信号
);

wire    [19:0]  data    ;
wire    [5:0]   point   ;
wire            seg_en  ;
wire            sign    ;

generat
#(
.CNT_MAX(23'd999_999),
.DATA_MAX(20'd999_999)
)
generat_inst
(
    .sys_clk     (sys_clk  ),   
    .sys_rst_n   (sys_rst_n),
    
    .data        (data     ),   
    .point       (point    ),   
    .seg_en      (seg_en   ),   
    .sign        (sign     )    
);

seg_595_dynamic    seg_595_dynamic_inst
(
    .sys_clk    (sys_clk   ),   
    .sys_rst_n  (sys_rst_n ),
    .data       (data      ),   
    .point      (point     ),   
    .seg_en     (seg_en    ),   
    .sign       (sign      ), 
    
    .stcp       (stcp      ),   
    .shcp       (shcp      ),   
    .ds         (ds        ),   
    .oe         (oe        )    
);

endmodule

二、仿真代码

`timescale  1ns/1ns
wire    stcp    ;   
wire    shcp    ;      
wire    ds      ;   
wire    oe      ;   

reg     sys_clk     ;
reg     sys_rst_n   ;

initial
    begin
        sys_clk     =   1'b1;
        sys_rst_n   <=  1'b0;
        #30
        sys_rst_n   <=  1'b1;
    end

//clk:产生时钟
always  #10 sys_clk <=  ~sys_clk;

//重新定义参数值,缩短仿真时间
defparam  top_seg_595_inst.seg_595_dynamic_inst.seg_dynamic_inst.CNT_MAX=19;
defparam  top_seg_595_inst.data_gen_inst.CNT_MAX    =   49;

top_seg_595  top_seg_595_inst
(
    .sys_clk     (sys_clk   ),  //系统时钟,频率50MHz
    .sys_rst_n   (sys_rst_n ),  //复位信号,低电平有效

    .stcp        (stcp      ),   //输出数据存储寄时钟
    .shcp        (shcp      ),   //移位寄存器的时钟输入
    .ds          (ds        ),   //串行数据输入
    .oe          (oe        )    //输出使能信号
);

endmodule
### 解决Verilog HDL端口连接错误 在处理Verilog HDL端口连接错误时,通常是因为输出或双向端口未正确连接到结构化的网络表达式。这种问题可能源于语法不匹配、信号声明不当或者实例化过程中端口映射有误。 #### 错误分析 根据提供的信息,“output or inout port `trip_signal` must be connected to a structural net expression” 表明该端口应被定义为一个结构性的网络表达式[^1]。这意味着,在模块实例化的过程中,`trip_signal` 或其他类似的端口(如 `ds`),应当通过某种形式的连线来实现其功能逻辑。 对于引用中的例子,如果存在如下情况: ```verilog module example_module ( input clk, input reset, output reg ds ); // ... endmodule ``` 当尝试实例化此模块时,如果没有正确地将 `ds` 连接到实际的网线,则会触发上述错误。例如下面的例子可能会引发同样的问题: ```verilog example_module inst_example ( .clk(sys_clk), .reset(sys_rst_n), // 此处遗漏了对 `ds` 的连接 ); ``` 为了修复这个问题,可以采用以下方法之一: #### 方法一:显式指定连线 确保所有的输入/输出端口都已正确定义并连上相应的信号。比如修改上面的实例化语句为: ```verilog wire ds_wire; example_module inst_example ( .clk(sys_clk), .reset(sys_rst_n), .ds(ds_wire) // 明确指定了 `ds` 对应的实际信号 ); ``` 这里 `.ds(ds_wire)` 将模块内部产生的 `ds` 值赋给了外部可见的 `ds_wire` 变量[^3]。 #### 方法二:使用寄存器型输出 有时也可以考虑改变设计风格,让某些原本作为纯组合逻辑输出的部分改用寄存器保存状态后再输出给外界访问。这不仅有助于减少复杂度还能够提高仿真效率以及综合后的性能表现。 例如调整原模块定义如下所示: ```verilog module example_module ( input clk, input reset, output reg ds ); always @(posedge clk or posedge reset) begin if (reset) ds <= 1'b0; else ds <= some_condition ? value_when_true : value_when_false; end endmodule ``` 这样做的好处在于每次更新都会同步发生在下一个时钟沿到来之时,从而避免因异步变化而导致潜在的竞争条件等问题发生[^2]。 另外需要注意的是,在进行任何改动之前最好先确认清楚具体的需求是什么样的——即到底是要保持当前行为不变还是允许一定程度上的灵活性?因为不同的选择会影响到最终的设计方案及其验证过程。 ### 总结 综上所述,要解决此类 Verilog HDL 端口连接错误的关键在于仔细检查每一个涉及 I/O 操作的地方,并按照实际情况合理安排它们之间的关系;同时也要注意遵循良好的编码习惯以降低未来维护成本。 ```verilog wire trip_signal_net; protection_top u_protection_top( .sys_clk(sys_clk), .sys_rst_n(sys_rst_n), .avl_address(avl_address), .avl_write(avl_write), .avl_writedata(avl_writedata), .avl_read(avl_read), .avl_readdata(avl_readdata), .trip_irq(trip_signal_net) // Correctly connect the signal here. ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小年痴槑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值