目的
前回の動作確認時に使用したDE0_NANO_SOC_Default.vの一部を改変してLEDカウンタを作成する。
評価ボードの動作クロックが50MHzなのでカウント動作が目で追えるように分周し、その信号をそのままLEDに使用する。
実施
とりあえず8bitカウンタを導入したときの波形の様子をmodelsimで確認する。
テストベンチはQuartusPrimeの「test bench template writer」をベースに作成
テンプレートデータは下記ディレクトリに生成される。
./{作業ディレクトリ}/simulation/modelsim/{verilogファイル名}.vt
これを行うことでテストベンチ作成の際に必要となる信号名入力の作業が省ける。
---------省略----------------
`timescale 1 ps/ 1 ps
module DE0_NANO_SOC_Default_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg ADC_SDO;
reg FPGA_CLK1_50;
reg FPGA_CLK2_50;
reg FPGA_CLK3_50;
reg [35:0] treg_GPIO_0;
reg [35:0] treg_GPIO_1;
reg [1:0] KEY;
reg [3:0] SW;
// wires
wire ADC_CONVST;
wire ADC_SCK;
wire ADC_SDI;
wire [35:0] GPIO_0;
wire [35:0] GPIO_1;
wire [7:0] LED;
// assign statements (if any)
assign GPIO_0 = treg_GPIO_0;
assign GPIO_1 = treg_GPIO_1;
DE0_NANO_SOC_Default i1 (
// port map - connection between master ports and signals/registers
.ADC_CONVST(ADC_CONVST),
.ADC_SCK(ADC_SCK),
.ADC_SDI(ADC_SDI),
.ADC_SDO(ADC_SDO),
.FPGA_CLK1_50(FPGA_CLK1_50),
.FPGA_CLK2_50(FPGA_CLK2_50),
.FPGA_CLK3_50(FPGA_CLK3_50),
.GPIO_0(GPIO_0),
.GPIO_1(GPIO_1),
.KEY(KEY),
.LED(LED),
.SW(SW)
);
---------省略----------------
テンプレートデータを用いてクロック部に信号を入れてやった時のテスト波形がこちら
KEY はDFFのイネーブル信号です。芸はないけど気にしない
後はLEDの点滅が目で追えるように分周部を8bitから32bitに変更して上位ビット分をLEDに繋げる。
---------省略----------------
reg [31:0] Cont;
always@(posedge FPGA_CLK1_50 or negedge KEY[0])
begin
if(!KEY[0])
Cont <= 0;
else
Cont <= Cont+1;
end
assign LED[7:0] = Cont[31:24];
endmodule
以上。
期待通りLEDのカウントアップ動作が確認できました。
参考本
入門Verilog HDL記述―ハードウェア記述言語の速習&実践 (Design wave basic)
Verilog HDL&VHDLテストベンチ記述の初歩 (DESIGN WAVE MOOK)