# HWH for HDL (Verilog) AXI Module

**URL:** <https://discuss.pynq.io/t/hwh-for-hdl-verilog-axi-module/412>\
**Category:** Support\
**Created:** [August 27, 2019, 1:52am UTC](https://discuss.pynq.io/t/hwh-for-hdl-verilog-axi-module/412 "2019-08-27T01:52:21Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Colorado\_Rob](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.pynq.io/colorado_rob/32/81_2.png) [@Colorado\_Rob](https://discuss.pynq.io/u/Colorado_Rob)\
**Post date:** [August 27, 2019, 1:52am UTC](https://discuss.pynq.io/t/hwh-for-hdl-verilog-axi-module/412/1 "2019-08-27T01:52:21Z")

</div>

Is there any documentation for providing HWH information for modules designed in HDL? My HLS modules have nice, named ports available from ip.register\_map, but my HDL module (AXI slave) does not. In fact, when I try to access the register\_map of the HDL module, it tells me that I need a HWH file. I do have that for the board-level design, but I suspect I am missing details for my HDL module.

FWIW, I can control the module by writing to the port addresses directly.

Is there any documentation available for creating my own HWH file when packaging an IP?

The process I went through for this design is to create a new project in Vivado, “Create & Package New IP|Create a new AXI4 Peripheral” and created my module in Verilog, integrated it with the AXI4 wrapper and packaged it. I then closed that project and created a new project, block design, with the Zynq subsystem and my IP package.

I’ve looked around for documentation on how to do this and have come up empty so far.

---

<div class="post-metadata">

**Author:** ![PeterOgden](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.pynq.io/peterogden/32/55_2.png) [@PeterOgden](https://discuss.pynq.io/u/PeterOgden)\
**Post date:** [August 27, 2019, 9:20am UTC](https://discuss.pynq.io/t/hwh-for-hdl-verilog-axi-module/412/2 "2019-08-27T09:20:32Z")

</div>

If you are using the packaging wizard you can add registers on “Addressing and Memory” page. If you right click on the address block you are using for the AXI-Lite interface you can “Add Register” which will create a new sub-pane where you can edit the details of the registers you add.

If you are packaging using TCL directly the same can be accomplished with the `ipx::add_register` TCL command. This will create a new object you can `set_property` on to configure it the same as any other Vivado TCL object.

One thing to note is that they way PYNQ interprets this data is that the “Name” is what gets propagated as the name of the register and the “Description” appears in the Python docstring. The “Display Name” is unused.

Peter

---

<div class="post-metadata">

**Author:** ![Colorado\_Rob](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.pynq.io/colorado_rob/32/81_2.png) [@Colorado\_Rob](https://discuss.pynq.io/u/Colorado_Rob)\
**Post date:** [August 28, 2019, 2:08am UTC](https://discuss.pynq.io/t/hwh-for-hdl-verilog-axi-module/412/4 "2019-08-28T02:08:49Z")

</div>

Perfect. Thank you. That worked.
