HDL_BITS--边缘捕获

题目:

对于 32 位矢量中的每个位,捕获输入信号从一个时钟周期中的 1 变为下一个时钟周期的 0。“捕获”表示输出将保持 1,直到寄存器复位(同步复位)。

每个输出位的行为类似于 SR 触发器:输出位应设置为(1)在发生 1 到 0 转换后的周期。当复位为高电平时,输出位应在正时钟边沿复位(至0)。如果上述两个事件同时发生,则重置优先。在下面示例波形的最后 4 个周期中,“reset”事件比“set”事件早一个周期发生,因此此处没有冲突。

在下面的示例波形中,为清楚起见,分别显示了 reset、in[1] 和 out[1]。

分析:

对于32位向量中的每一位,当输入信号从一个时钟周期的1变化到下一个时钟周期的0时捕获(因为in由1变到0后,out才为1,故为捕捉下降沿),“捕获”意味着输出将保持1(直到被reset高电平有效进行复位(同步重置)。

每个输出位的行为就像一个SR触发器:输出位应该在发生1到0转换后的周期被设置(为1)。当复位为高时,输出位应该在正时钟边缘复位(为0)。如果上述两个事件同时发生,则reset具有优先级。

在下面示例波形的最后4个周期中,“reset”事件比“set”事件早一个周期发生,因此这里不存在冲突。

关键点:1、下降沿捕获

out <= ~in & in_d1;    //下边沿检测 
out <= in & ~in_d1;    //上边沿检测
out <= in ^in_d1l;     //双边沿检测

2、捕获时,输出保持为1,直到reset高电平有效(表示out会延续上一个时钟周期的状态)

Verilog代码:

module top_module (
    input clk,
    input reset,
    input [31:0] in,
    output [31:0] out
);
    reg [31:0] in_d1;
    always @(posedge clk)
        
        begin
            integer i;
            in_d1 <= in;
            if(reset)
                out <= 32'b0;
             else
                 out <= ~in & in_d1 |out; //其中“|out”表示捕获后保持上一个out状态,直到复位
           
        end
endmodule


参考原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/120258410

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这段数字设计综合工具的执行脚本包含了多个命令,每个命令的作用如下: 1. `source -verbose "../const/design_info.tcl"`:引入常量文件 `design_info.tcl`。 2. `set_attribute information_level 9`:设置综合信息输出级别为 9。 3. `set_attribute hdl_track_filename_row_col true`:在门级网表中添加源代码文件名、行号和列号等信息。 4. `set_attribute hdl_generate_index_style %s_%d`:设置门级网表的索引样式为 `%s_%d`,其中 `%s` 表示模块或信号的名称,`%d` 表示该模块或信号在其父模块中的序号。 5. `set_attribute hdl_generate_separator _`:设置门级网表中模块和信号之间的分隔符为下划线。 6. `set_attribute hdl_search_path $SEARCH_PATH`:设置综合工具的搜索路径为 `$SEARCH_PATH`,其中 `$SEARCH_PATH` 是常量文件中定义的路径。 7. `set_attribute library $LIB_LIST_MAX`:将当前设计的综合库设置为工程中定义的最大库列表。 8. `read_hdl -sv $RTL_LIST -define LEAF_BHV`:读取 Verilog/SystemVerilog 文件,其中 `$RTL_LIST` 是常量文件中定义的文件列表,`-define LEAF_BHV` 表示定义了宏 `LEAF_BHV`。 9. `set_attr blackbox true [find / -hdl_arch clock_tree_model*]`:将时钟树模型标记为黑盒。 10. `elaborate $DESIGN_TOP`:对顶层模块进行综合。 11. `set_attribute write_vlog_bit_blast_constants true`:在 Verilog 输出文件中写入常量的位表示。 12. `set_attribute write_vlog_unconnected_port_style none ;#(none/partial/full)`:在 Verilog 输出文件中处理未连接的端口,`none` 表示不处理。 13. `set_attribute hdl_undriven_output_port_value none`:定义未驱动输出端口的默认值为 `none`。 14. `set_attribute hdl_unconnected_input_port_value x`:定义未连接输入端口的默认值为 `x`。 15. `set_attribute hdl_allow_inout_const_port_connect false`:禁止连接 inout 类型端口和常量端口。 16. `syn_gen -effort high`:进行综合,`-effort high` 表示使用高效的综合策略。 17. `change_names -regexp -allowed "a-zA-Z0-9_" -subdesign -max_length 20`:对子模块的名称进行修改,将不符合规范的字符替换为下划线,最大长度为 20 个字符。 18. `change_names -regexp -allowed "a-zA-Z0-9_" -instance`:对实例的名称进行修改,将不符合规范的字符替换为下划线。 19. `change_names -regexp -allowed "a-z0-9_" -net`:对信号的名称进行修改,将不符合规范的字符替换为下划线。 20. `write_hdl -equation > $GNR_NETLIST`:将门级网表输出到 `$GNR_NETLIST` 文件中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值