# verilog模块连线脚本 **Repository Path**: wymvelyaten/verilog-module-wiring-script ## Basic Information - **Project Name**: verilog模块连线脚本 - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-03 - **Last Updated**: 2024-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: Verilog, systemverilog ## README ### Verilog模块连线脚本 V1.1 #### 更新V1.1 去掉了规则连接的反向连接机制 #### 介绍 这是一个用于顶层模块连线的脚本,核心文件是`hdllinker.py`。工作流程为 `paraser.py` --`module.py`--> `link.py` --`top.sv`--> 其他工作。如果有问题欢迎反馈和建议。 #### 目的 在顶层模块中,大量的模块间连线非常繁琐且容易出错,因此制作了这个脚本。使用这个脚本可以将精力集中在模块间的逻辑关系上,而不是不断地查找名字和声明`wire`或`logic`。 脚本配合VSCode的代码提示功能效果更佳。 #### 使用步骤 1. **在`vlist`中给出所有要做连接的模块的源文件地址** 2. **注意`vlist`中的相对路径,并在`parase.py`中修改搜寻路径,运行后,所有模块的引脚信息会被打包成`module.py`,通过`.`就可以调用** 3. **在`link.py`中定义连接关系,并修改`top`文件的生成路径,然后运行** #### 使用说明 1. **注册模块 参数化设置** ```python from modules import * from hdllinker import VerilogLinker hdll = VerilogLinker() # fft_wrapper模块设置 pars = fft_wrapper.parameter pars.DATA_WIDTH["value"] = DATA_WIDTH pars.AXI_ARADDR_WIDTH["value"] = AXI_ADDR_WIDTH pars.AXI_AWADDR_WIDTH["value"] = AXI_ADDR_WIDTH pars.AXI_RDATA_WIDTH["value"] = AXI_DATA_WIDTH pars.AXI_WDATA_WIDTH["value"] = AXI_DATA_WIDTH # 注册并更新参数 hdll += mods ``` 2. **普通连接** ```python hdll \ - "bus" \ + (axi_interconnect.output.m_axi_araddr, drm_base_proc_wrapper.input.s_axi_araddr) \ - "p2p" \ + (axi_interconnect.output.m_axi_arvalid, drm_base_proc_wrapper.input.s_axi_arvalid) \ ``` - **“bus”模式(默认模式)**:在这个模式下,多个小位宽信号连接到大位宽信号时,多个小位宽信号共享大位宽的位。 - **“p2p”模式**:在这个模式下,小位宽信号独占大位宽信号的位,后续连接的小位宽信号自动按序占用空的位,当大位宽位数不足时,日志会给出提示。 3. **规则连接** 规则定义和连接 ```python # 定义连接器 slave_master_inner = ( { "input": r"^s_", "output": r"^m_", }, # bus信号定义 ['araddr','awaddr','wdata','wstrb'], # 匹配规则 r"(?!.*dcp).*", # 连接器名称 "inner" ) hdll \ % (top , dcp2axisl , slave_master_top) # 规则连接用% ``` 1. **定义输出信号的名称和槽的名称** 2. **定义bus类型的pin(如总线信号,多个模块共享一个`wdata`、`awaddr`、`araddr`等)** 3. **划定需要进行连接的信号的范围(正则表达式)** 4. **如果是和顶层引脚连接,则连接器名称必须是“top”,因为顶层的输出对于内部模块来说就是输入,需要特殊处理**