Как задать имя сигнала в MyHDL? - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу дать имя для сигналов в некоторых случаях явно. Это полезно в сильно параметризуемых кодах. Я понял, что настройка защищенного поля _name может помочь в некоторых случаях. Но есть ли официальный способ?

Вот простой пример:

from myhdl import *


@block
def my_block(clock, reset, simple_signal, iface):

    simple_signal._name = 'name_of_simple_signal'
    iface.sig1._name = 'foo'
    sig2 = iface.sig2
    sig2._name = 'bar'

    @always_seq(clock.posedge, reset)
    def simple_seq():
        iface.sig1.next = simple_signal
        sig2.next = simple_signal

    return instances()


class AwesomeInterface(dict):
    def __init__(self, min=-2, max=2):
        self.sig1 = Signal(intbv(0, min=min, max=max))
        self.sig2 = Signal(intbv(0, min=min, max=max))


clock = Signal(bool(0))
reset = ResetSignal(0, active=1, isasync=False)
simple_signal = Signal(intbv(0)[32:])
iface = AwesomeInterface()

my_inst = my_block(clock, reset, simple_signal, iface)

my_inst .convert(hdl='Verilog')

Вот сгенерированный код Verilog:

// File: my_block.v
// Generated by MyHDL 0.11
// Date: Fri Apr 17 09:33:20 2020


`timescale 1ns/10ps

module my_block (
    clock,
    reset,
    simple_signal,
    foo,
    bar
);


input clock;
input reset;
input [31:0] simple_signal;
output signed [1:0] foo;
reg signed [1:0] foo;
output signed [1:0] bar;
reg signed [1:0] bar;




always @(posedge clock) begin: MY_BLOCK_SIMPLE_SEQ
    if (reset == 1) begin
        bar <= 0;
        foo <= 0;
    end
    else begin
        foo <= simple_signal;
        bar <= simple_signal;
    end
end

endmodule

Есть ли официальный способ установить имя переменной, которая работает во всех случаях?

...