質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

1回答

489閲覧

7セグメントLED表示を実現したい

r6s.riku

総合スコア0

Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2023/05/31 07:58

編集2023/05/31 09:02

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 7セグメントLEDランプを点灯させたい
  • 現段階での出力結果

前提

ここに質問の内容を詳しく書いてください。

VerilogHDLで信号のランプ点灯を制御する回路を作っています。
一通りのモジュールを書き終えましたが、以下の問題の意味が分かりません。

問題と目的

意味が分からない問題:
”7セグメント表示部の記述はタスク(led_display)として記述し、これを別のファイル(led_display.tk)に作成します”
→どーゆーこと?

工程↓
DINを入力
→奇数なら(-1)&偶数なら(/2)と繰り返す
→各演算の結果(DOUT)と演算を行ったカウント(CNT)をディスプレイに表示させる
→ディスプレイ表示は7セグメントとし、ディスプレイの表示例(図)のような結果に出力させたい

現状:現段階での出力結果(一部例図)を参照

目的とブロック図:
出力させたいもの
ブロック図
現段階での出力結果(一部例):
出力結果

回路記述・テストベンチ・実行ディレクトリ

回路記述

//回路記述 // decdiv.v→decdiv2.v module decdiv2(LD,DIN,RES_X,CLK,DOUT); input LD; input DIN; input RES_X; input CLK; output DOUT; reg [7:0] DOUT; reg [7:0] DOUTNEXT; wire [7:0] DIN; always @(posedge CLK or negedge RES_X) begin if (RES_X == 1'b0) DOUT <= 1'b0; else DOUT <= DOUTNEXT; end always @(LD or DIN or DOUT) begin if (LD == 1'b1) DOUTNEXT <= DIN; else if (LD == 1'b0 && DOUTNEXT%2 == 1) DOUTNEXT <= DOUT - 1'b1; else if (LD == 1'b1 && DOUTNEXT%2 == 0) DOUTNEXT <= DOUT/2; end endmodule //decdiv_cnt.v→decdiv2_cnt.v module decdiv2_cnt(DOUT,LD,RES_X,CLK,CNT); input LD; input RES_X; input CLK; input [7:0] DOUT; output [3:0] CNT; reg [3:0] CNT; wire [7:0] DOUT; always @(posedge CLK or negedge LD) begin if (RES_X == 1'b0 || LD == 1'b1) CNT <= 4'h0; else if (LD == 1'b0 && DOUT >= 7'h1) CNT <= CNT + 4'h1; else if (DOUT == 0) CNT <= CNT; else CNT <= 4'hx; end endmodule //led_decode.v module led_decode(DIN,LED); input [3:0] DIN; output [6:0] LED; reg [6:0] LED; always @(DIN) begin if (DIN == 4'b0000) //0 LED <= 7'b1111110; else if (DIN == 4'b0001)//1 LED <= 7'b0110000; else if (DIN == 4'b0010)//2 LED <= 7'b1101101; else if (DIN == 4'b0011)//3 LED <= 7'b1111001; else if (DIN == 4'b0100)//4 LED <= 7'b0110011; else if (DIN == 4'b0101)//5 LED <= 7'b1011011; else if (DIN == 4'b0110)//6 LED <= 7'b1011111; else if (DIN == 4'b0111)//7 LED <= 7'b1110010; else if (DIN == 4'b1000)//8 LED <= 7'b1111111; else if (DIN == 4'b1001)//9 LED <= 7'b1111011; else if (DIN == 4'b1010)//A LED <= 7'b1110111; else if (DIN == 4'b1011)//b LED <= 7'b0011111; else if (DIN == 4'b1100)//C LED <= 7'b1001110; else if (DIN == 4'b1101)//d LED <= 7'b0111101; else if (DIN == 4'b1110)//E LED <= 7'b1001111; else if (DIN == 4'b1111)//F LED <= 7'b1000111; else LED <= 7'bxxxxxxx; end endmodule //decdiv2.v→decdiv3.v module decdiv3(DIN,LD,RES_X,CLK,DOUT_LED_HI,DOUT_LED_LO,CNT_LED); input [7:0] DIN; input LD; input RES_X; input CLK; output [6:0] DOUT_LED_HI; output [6:0] DOUT_LED_LO; output [6:0] CNT_LED; wire [3:0] a_hi; wire [3:0] a_lo; wire [7:0] HI; wire [3:0] LO; wire [6:0] DOUT_LED_HI; wire [6:0] DOUT_LED_LO; wire [6:0] CNT_LED; assign a_hi = HI[7:4]; assign a_lo = LO[3:0]; decdiv2 decdiv_t(.DIN(DIN), .LD(LD), .RES_X(RES_X), .CLK(CLK), .DOUT(HI)); decdiv2_cnt decdiv2_cnt_t(.DOUT(HI), .LD(LD), .RES_X(RES_X), .CLK(CLK), .CNT(LO)); led_decode led_decode_hi_t(.DIN(a_hi), .LED(DOUT_LED_HI)); led_decode led_decode_lo_t(.DIN(a_lo), .LED(DOUT_LED_LO)); led_decode cnt_led_t(.DIN(LO), .LED(CNT_LED)); endmodule

テストベンチ

//テストベンチ module decdiv3_tp; reg [7:0] DIN; reg LD,RES_X,CLK; wire [6:0] DOUT_LED_HI; wire [6:0] DOUT_LED_LO; wire [6:0] CNT_LED; integer i,fd; parameter STEP = 1000; task led_dec; begin $display ("DOUT = "); $display (""); $display (" %b %b ", DOUT_LED_HI[6], DOUT_LED_LO[6]); $display (""); $display (" %b %b %b %b", DOUT_LED_HI[1],DOUT_LED_HI[5],DOUT_LED_LO[1],DOUT_LED_LO[5]); $display (""); $display (" %b %b ", DOUT_LED_HI[0],DOUT_LED_LO[0]); $display (" %b %b %b %b", DOUT_LED_HI[2],DOUT_LED_HI[4],DOUT_LED_LO[2],DOUT_LED_LO[4]); $display (""); $display (" %b %b ",DOUT_LED_HI[3],DOUT_LED_LO[3]); $display (""); $display ("CNT = "); $display (" %b ", CNT_LED[6]); $display (""); $display (" %b %b ", CNT_LED[1], CNT_LED[5]); $display (""); $display (" %b ", CNT_LED[0]); $display (" %b %b ", CNT_LED[2],CNT_LED[4]); $display (""); $display (" %b ", CNT_LED[3]); $display (""); end endtask decdiv3 decdiv3_t (.DIN(DIN), .LD(LD), .RES_X(RES_X), .CLK(CLK), .DOUT_LED_HI(DOUT_LED_HI), .DOUT_LED_LO(DOUT_LED_LO), .CNT_LED(CNT_LED)); always begin CLK = 0; #(STEP/2); CLK = 1; #(STEP/2); led_dec; end initial begin RES_X = 1; #STEP RES_X = 0; #STEP RES_X = 1; #(STEP*23) RES_X = 0; #(STEP*2) RES_X = 1; $finish; end initial begin LD = 0; #(STEP*3) LD = 1; #(STEP*1) LD = 0; #(STEP*15) LD = 1; #(STEP*1) LD = 0; #(STEP*9) LD = 1; #(STEP*1) LD = 0; #(STEP*10) LD = 1; #(STEP*1) LD = 0; $finish; end initial begin DIN = 0; #(STEP*2) DIN = 8'b01111111; #(STEP*20) DIN = 8'b00000111; #(STEP*10) DIN = 8'b00001110; #(STEP*10) DIN = 8'b00000001; $finish; end initial begin fd = $fopen("led_display.tk"); for (i = 0; i < 256; i= i + 1) begin CLK = 0; #(STEP/2); CLK = 1; #(STEP/2); $display (fd,"DOUT = "); $display (fd,""); $display (fd," %b %b ", DOUT_LED_HI[6], DOUT_LED_LO[6]); $display (fd,""); $display (fd," %b %b %b %b", DOUT_LED_HI[1],DOUT_LED_HI[5],DOUT_LED_LO[1],DOUT_LED_LO[5]); $display (fd,""); $display (fd," %b %b ", DOUT_LED_HI[0],DOUT_LED_LO[0]); $display (fd," %b %b %b %b", DOUT_LED_HI[2],DOUT_LED_HI[4],DOUT_LED_LO[2],DOUT_LED_LO[4]); $display (fd,""); $display (fd," %b %b ", DOUT_LED_HI[3],DOUT_LED_LO[3]); #(STEP*10) DIN = 8'b00001110; #(STEP*10) DIN = 8'b00000001; $finish; end initial begin fd = $fopen("led_display.tk"); for (i = 0; i < 256; i= i + 1) begin CLK = 0; #(STEP/2); CLK = 1; #(STEP/2); $display (fd,"DOUT = "); $display (fd,""); $display (fd," %b %b ", DOUT_LED_HI[6], DOUT_LED_LO[6]); $display (fd,""); $display (fd," %b %b %b %b", DOUT_LED_HI[1],DOUT_LED_HI[5],DOUT_LED_LO[1],DOUT_LED_LO[5]); $display (fd,""); $display (fd," %b %b ", DOUT_LED_HI[0],DOUT_LED_LO[0]); $display (fd," %b %b %b %b", DOUT_LED_HI[2],DOUT_LED_HI[4],DOUT_LED_LO[2],DOUT_LED_LO[4]); $display (fd,""); $display (fd," %b %b ", DOUT_LED_HI[3],DOUT_LED_LO[3]); $display (fd,""); $display (fd,"CNT = "); $display (fd,""); $display (fd," %b ", CNT_LED[6]); $display (fd,""); $display (fd," %b %b ",CNT_LED[1],CNT_LED[5]); $display (fd,""); $display (fd," %b ",CNT_LED[0]); $display (fd," %b %b ",CNT_LED[2],CNT_LED[4]); $display (fd,""); $display (fd," %b ",CNT_LED[3]); $display (fd,""); end $fclose(fd); end endmodule

実行ディレクトリ

#!/bin/csh -f irun \ decdiv2.v \ decdiv2_cnt.v \ led_decode.v \ decdiv3.v \ decdiv3_tp.v \ -run

試したこと

led_display.tkディレクトリを作成しましたが、何を入力すればいいのか、またその仕組みが理解できません。

補足情報(FW/ツールのバージョンなど)

Verilog-HDL,LINUX

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/05/31 08:02

その7セグLEDとFPGA(?)はどういう接続になるんでしょうか また、その接続ピンと信号はどういう対応となるんでしょうか。
r6s.riku

2023/05/31 08:14

すみません。質問の意味が理解できていません。 FPGAや接続ピンといった言葉はテキストに載っておらず、現在調べ学習中です。
ozwk

2023/05/31 09:17 編集

多分シミュレーション実行なんで物理ピンとかないですよ
guest

回答1

0

多分、コンソールに7セグ風に表示する機能を
タスクとして切り出してled_display.tkファイルに記述しろということかと思います。

投稿2023/05/31 09:14

ozwk

総合スコア13528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問