| 6. VerilogHDLシミュレーションのインポート |
ジョンソンカウンタのVerilogHDL記述 (jcnr4.v)
module jcnt4 (CLK, CLR_B, PR_B, Q); input CLK, CLR_B, PR_B; output [3:0] Q; reg [3:0] Q; always @(negedge CLR_B or negedge PR_B or posedge CLK) begin if (!CLR_B) begin Q <= 4'h0; end else if (!PR_B) begin Q <= 4'hf; end else begin Q <= Q << 1; Q[0] <= ~Q[3]; end end endmoduleテストベンチのVerilogHDL記述 (tb_jcnt4.v)
`timescale 1ns/1ns
module tb_jcnt4;
reg r_clr_b, r_pr_b, r_clk; // Clear, Program, Clock
wire [3:0] w_q; // Output
parameter cycle = 200; // Clock period = 5MHz
parameter treset = 100; // Reset period
parameter pc = 10; // Finish cycle
jcnt4 DUT(.CLK(r_clk), .CLR_B(r_clr_b), .PR_B(r_pr_b), .Q(w_q));
// Reset or Preset
initial begin
#0 r_clr_b <= 1'b0; r_pr_b <= 1'b1;
#(treset) r_clr_b <= 1'b1;
#(pc*cycle) $stop;
end
// Clock
initial begin
#0 r_clk <= 1'b0;
#(cycle/2) forever #(cycle/2) r_clk <= ~r_clk;
end
// Monitor and value change Dump
initial begin
// $monitor($time,, "CLR_B = %b PR_B = %b Q = %h CLK = %b ", r_clr_b, r_pr_b, r_clk, w_q);
// VCD file name
$dumpfile("jcnt4.vcd");
// VCD signal name
$dumpvars(0, DUT.CLR_B, DUT.PR_B, DUT.CLK, DUT.Q);
// VCD flush
#(treset + pc*cycle) $dumpflush;
end
endmodule

cd .\Desktop\jcnt4 perl vcd2ni.pl --clock_name=CLK --waveform=RL --pattern_name=verilog_pattern --timing_name=CNT_RUN jcnt4.vcd
オプションの内容

