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
オプションの内容