Verilog (중요한 것은 SystemVerilog가 아님)로 작성된 프로젝트가 있습니다.이 프로젝트는 설계의 서로 다른 부분간에 전달되는 신호의 수 때문에 관리하기가 힘들었습니다. . 동일한 신호가 필요한 모듈이 여러 개 있기 때문에 더 적은 수의 명명 된 객체로 모듈을 통합하려고합니다. 질문은 그것을하는 방법입니다.Verilog에서 C struct와 같은 것을 정의 할 수있는 방법이 있습니까?
module mymodule(sig_a_in, sig_b_in, sig_c_in, sig_d_in, sig_e_in,
sig_a_out, sig_b_out, sig_c_out, sig_d_out, sig_e_out);
input wire sig_a_in, sig_b_in, sig_c_in;
input wire [5 : 0] sig_d_in;
input wire [31 : 0] sig_e_in;
output reg sig_a_out, sig_b_out, sig_c_out;
output reg [5 : 0] sig_d_out;
output reg [31 : 0] sig_e_out;
endmodule
그것은 내가 이름으로 신호를 참조 할 수 가독성을 위해, 내 의견으로는, 중요하다
은의이 내 인위적인 예입니다 가정 해 봅시다. 그러나 각 모듈에 모두 개별적으로 전달하고 싶지는 않습니다. 다시 말하지만,이 프로젝트에서는 Verilog 만 사용하므로 SystemVerilog 구조는 불가능합니다.첫 번째 생각은 하나의 버스로 결합한 다음 정의 된 이름을 사용하여 개별 와이어를 참조하는 것입니다. 그러나 이것은 특히 다른 버스를 믹스에 추가 할 때 다소 복잡합니다. 신호가 명백한 암시 적 순서를 가지기 때문에 이것은 내 인위적인 예제에서는 꽤 사소한 것이지만 실제로는 그렇지 않습니다. 공구 쇄 구조체에서 와이어의 모듈에 의해 사용되는 것으로 만 와이어를 합성 할 수있는 구별 할 수 있도록
`define SIGNAL_BUS_WIDTH 41
`define A 0
`define B 1
`define C 2
`define D 3
`define E 9
module mymodule(signal_bus_in, signal_bus_out);
input wire [`SIGNAL_BUS_WIDTH-1 : 0] signal_bus_in;
output reg [`SIGNAL_BUS_WIDTH-1 : 0] signal_bus_out;
// reference a
signal_bus_in[`A]
// reference d? Not good when names don't have an obvious order
signal_bus_in[`E-1 : `D]
endmodule
마지막으로,이 모든 이외에 필요가있다. 모든 모듈이 모든 와이어를 사용하는 것은 아니므로 사용하지 않는 여분의 경로가 필요 없습니다. 위의 버스 예에서도 도구가 똑똑해야한다고 생각하지만 완전히 확신 할 수는 없습니다.
Verilog에서 원하는 것을 얻는 좋은 방법이 있습니까?
http://www.project-veripage.com/ sv_structure.php –
SystemVerilog 용입니다. SystemVerilog가 아닌 Verilog를 사용하고 있습니다. – seanmk
복잡한 데이터 구조를 만들 때 Verilog는 매우 제한적입니다. 이것이 Verilog-2005 이후 IEEE에서 SystemVerilog로 대체 된 이유입니다. –