Verilog-Perl
ちょっと評価するタイミングが遅れたけど、Verilog-Perl使ってみました。Monpe's Roomさんを参考に試してみました。
#!/usr/bin/perl -wuse strict;
use Verilog::Netlist;
my @FileList = ('ide_if.v', 'ide_reg.h', 'ide_reset.v',
'ide_sector_read.v', 'ide_sector_set.v',
'shallot.v', 'shallot_sm.v');
# Main ====================================================
my $NetList = new Verilog::Netlist;
ReadVerilogFiles($NetList, \@FileList);
PrintHier($NetList);exit(0);
# Sub routines ============================================
sub ReadVerilogFiles {
my ($netlist, $r_filelist) = @_;
foreach my $file (@{$r_filelist}) {
$netlist->read_file(filename=>$file);
}
$netlist->link(); # connection resolve
}
sub PrintHier{
my ($nl) = @_;
# Read in any sub-modules
$nl->link();
$nl->lint();
$nl->exit_if_error();foreach my $mod ($nl->top_modules_sorted) {
show_hier ($mod, " ", "", "");
}
}sub show_hier {
my $mod = shift;
my $indent = shift;
my $hier = shift;
my $cellname = shift;
if (!$cellname) {$hier = $mod->name;} #top modules get the design name
else {$hier .= ".$cellname";} #append the cellname
printf ("%-45s %s\n", $indent."Module ".$mod->name,$hier);
foreach my $sig ($mod->ports_sorted) {
#printf ($indent." %sput %s\n", $sig->direction, $sig->name);
}
foreach my $cell ($mod->cells_sorted) {
#printf ($indent. " Cell %s\n", $cell->name);
foreach my $pin ($cell->pins_sorted) {
# printf ($indent." .%s(%s)\n", $pin->name, $pin->netname);
}
show_hier ($cell->submod, $indent." ", $hier, $cell->name) if $cell->submod;
}
}
自作のIDEコントローラを読ませると、
Module shallot shallot
Module ide_if shallot.ide_if
Module ide_reset shallot.ide_reset
Module ide_sector_read shallot.ide_sector_read
Module ide_sector_set shallot.ide_sector_set
Module shallot_sm shallot.shallot_sm
こんな感じで階層を出してくれます。もちろんソースのコメントアウトをはずすと、ポートとかインスタンス名(っぽい?)も出してくれます。
調子に乗って、たっくさんのmipsも試してみる。
my $opt = new Verilog::Getopt;
$opt->parameter( "-DALTERA");
でALTERAをdefineさせて実行すると、
%Error: uart_write_cyclone.v:29: Cannot find fifo512_cyclone
%Error: uart_write_cyclone.v:29: Cannot find fifo512_cyclone
%Error: uart_write_cyclone.v:29: Module reference not found: fifo512_cyclone
Exiting due to errors
残念ながら階層構造を作るところでエラー。しかし、dummyのfifo512_cycloneを用意してあげると普通に通る。
Module gen_1port_ram gen_1port_ram
Module ram_module_altera ram_module_altera
Module tb_wb_conbus tb_wb_conbus
Module hardware_top tb_wb_conbus.dut
Module wb_conbus_top tb_wb_conbus.dut.conbus
Module wb_conbus_arb tb_wb_conbus.dut.conbus.wb_conbus_arb
Module wishbone_yacc tb_wb_conbus.dut.yacc_as_wb_master
Module cache_module tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram2
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram3
Module icache_module tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram0_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram0_way1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram1_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram1_way1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram2_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram2_way1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram3_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram3_way1
Module cpu_core tb_wb_conbus.dut.yacc_as_wb_master.yacc
Module mul_div tb_wb_conbus.dut.yacc_as_wb_master.yacc.MulDiv
Module alu tb_wb_conbus.dut.yacc_as_wb_master.yacc.alu1
Module substruct tb_wb_conbus.dut.yacc_as_wb_master.yacc.alu1.sub
Module gen_ram32x32 tb_wb_conbus.dut.yacc_as_wb_master.yacc.ram_regfile32xx32
Module shifter tb_wb_conbus.dut.yacc_as_wb_master.yacc.sh1
Module onchip_ram_top tb_wb_conbus.onchip_ram
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank0
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank1
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank2
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank3
Module virtual_io_port tb_wb_conbus.virtual_io_port
Module top top
Module uart_read uart_read
Module uart_write uart_write
Module fifo512_cyclone uart_write.fifo
Module yacc_test yacc_test
Module cpu_core yacc_test.new_yacc
Module mul_div yacc_test.new_yacc.MulDiv
Module alu yacc_test.new_yacc.alu1
Module substruct yacc_test.new_yacc.alu1.sub
Module gen_ram32x32 yacc_test.new_yacc.ram_regfile32xx32
Module shifter yacc_test.new_yacc.sh1
Module ram yacc_test.ram_module
すげー!。
やっぱりPerl最強。
The comments to this entry are closed.
Comments