• 締切済み

Verilog HDL で output を open にしたいときは?

Verilog を勉強中なのですが、周りに聞ける人がいないので、質問させてください。 (ちなみに VHDL は習得しているつもりです。) いろいろ疑問点があるので、分けて何点か質問させていただきました。 VHDLにある「open」に相当するものは verilog にありますか? VHDLでの test_inst : test port map( clr => clr, clk => clk, a_out => open, b_out => b_out ); みたいにoutポートを開放するとき。 Verilog を使っておられる方々はどうされていますか? test test0( .clr(clr), .clk(clk), //.a_out, .b_out(b_out) ); みたいにコメントアウト? でも、名前による接続ならいいですが、順番による接続だとコメントアウト作戦は 使えないですよね。 または、なにかダミーの wire を定義して接続でしょうか?

みんなの回答

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

test test0( .clr(clr), .clk(clk), .a_out(), .b_out(b_out) ); としてたような…。(自信なし^^;)

marpon
質問者

お礼

この書き方は盲点でした。便利ですね。ありがとうございます。

関連するQ&A

  • verilog HDLについての質問

    verilogで以下のようなコードだと、エラーが起こります。 何故起こるのか、対処法はどのようにすればよいか教えてください。 //-----ソースコード---------------------------- modele Test(CLK1,CLK2,PG1); input CLK1; input CLK2; output PG1; reg dmy; always @(posedge CLK) begin dmy = 1; end always @(posedge CS) begin dmy = 0; end assign PG1 = dmy; //-----エラー内容------------------------------- Only one always block may assign a given variable dmy //-----以上---------------------------------------- regは複数のalwaysで変化させることはできませんということでしょうが、なぜでしょうか。

  • 2ビットのレジスタのVerilog HDL記述

    QuatusIIで2ビットのレジスタをつくっているのですが、ブロック図をコンパイルするときにエラーがでてしまいます。 エラー内容をみるとVerilog HDL記述が間違えているみたいなのですが、どこが間違えているか教えてください。 /* REG2 */ module REG2module ( EN, CLR_B, IN1, IN2, CLK, Q ); input CLR_B, CLK; input IN1, IN2; output [1:0] Q; output EN; assign EN=FUNC_EN (IN1, IN2); function FUNC_EN; input IN1,IN2; if (IN1>0|IN2>0) FUNC_EN=1; else FUNC_EN=0; endfunction wire [1:0] D; CONECT (IN1,D[0]); CONECT (IN2,D[1]); reg [1:0] Q; always @( posedge CLK or negedge CLR_B ) if( !CLR_B ) Q <= 0; else if(EN) Q <= D; endmodule エラーにはError: Node instance "comb_8" instantiates undefined entity "CONECT" Error: Node instance "comb_9" instantiates undefined entity "CONECT" と出ています。意味を調べたのですが、CONECTが定義されていない?という事は具体的にどうすればいいでしょうか。 CONECT (IN1,D[0]); CONECT (IN2,D[1]); の部分が間違っているのはなんとなくわかるのですが、どうしたらいいかわかりません。 よろしくお願いします

  • verilog HDLのコードについて質問

    以下のURLのverilog HDLのコードについて質問です。 watch_falling_edge <= { watch_falling_edge[4:0], key_clk}; ここで、クロックが上がるたびにwatch_falling_edgeにキークロックを1つずつ入れていくことはわかるのですが、 if( watch_falling_edge == 6'b111000)begin ここで、なぜwatch_falling_edgeが「 6'b111000」になったときにcaseをはじめるのでしょうか? またこれとは別に、クロックとキーボードクロックの周波数は全く違いますか? よろしくお願いします。 http://www.hirokinakaharaoboe.net/tips_wiki/index.php?%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E5%85%A5%E5%8A%9B%E3%82%92%E5%8F%97%E3%81%91%E4%BB%98%E3%81%91%E3%82%8B#d23a5805

  • フリーのverilog-HDLシミュレータ

    Windows上で動作するフリーのverilog-HDLシミュレータを探しています。 Siliosが少し前までフリーでダウンロードできたそうなのですが、今はダウンロードが禁止されています。。 例えば、このような回路を波形を見ながら解析したいと考えています。 //○シミュレーション対象:4ビット加算回路 module adder ( a, b, q ); input [3:0] a,b; output [3:0] q; assign q = a + b; endmodule //○シュミレーション記述 `timescale 1us/1us module adder_test; reg [3:0] a,b; wire [3:0] q; parameter STEP=1000 adder adder ( a, b, q ); initial begin a = 4'h0; b = 4'h0; #STEP a = 4'h5; b = 4'ha; #STEP a = 4'h7; b = 4'ha; #SEEP $finish; end endmodule

  • Verilog-HDLでの記述方法

    Verilog-HDLで回路を記述しているのですが、疑問点があるので質問させていただきます。 回路記述はおおまかに以下のようなものです。 module Adder(A, B, S, C); input [3:0] A; input [3:0] B; output [3:0] S; output C; 4ビット加算器のインスタンス(.A(A), .B(B), .S(S), .C(C)); endmodule この回路への入力は上位モジュールから与えられるとします。 このような回路記述をしていたとして、たとえば入力線Aの特定のビットが常に0になってしまう故障を記述したいとき wire err = 1'b0; assign A[0] = err; という記述を追加してみたのですが、どうもA[0]には不定値が入り込んでいるようです。 このような記述ではA[0]を常に0にすることはできないのでしょうか?またこのような故障を仮定したい場合はどのように記述すべきなのでしょうか?

  • Verilog HDL 3_5セレクタ

    Verilog_HDLで3_5セレクタを作成しているのですが、うまくいかないので助けてください。 1つの4ビットの入力と2つの5ビットの入力の中から5ビットの出力を選び出す回路です。入力が4ビットのとき、最上位に0をつけ、5ビットにする。SELの組み合わせにより、出力を選択する。 /* 3-5SELECTOR */ module SEL3_5module (A, B, C, SEL, OUT); input [3:0] A; input [4:0] B, C; input [1:0] SEL; output [4:0] OUT; wire [4:0] IN; CONECT (A[0],IN[0]); CONECT (A[1],IN[1]); CONECT (A[2],IN[2]); CONECT (A[3],IN[3]); CONECT (0,IN[4]); assign OUT = SEL4_5_FUNC (IN, B, C, SEL); function [4:0] SEL4_5_FUNC; input [4:0] IN, B, C; input [1:0] SEL; case ( SEL ) 0: SEL4_5_FUNC = IN; 1: SEL4_5_FUNC = B; 2: SEL4_5_FUNC = C; 3: SEL4_5_FUNC = 0; endcase endfunction endmodule エラー文はError: Node instance "comb_4" instantiates undefined entity "CONNECT" Error: Node instance "comb_5" instantiates undefined entity "CONNECT" Error: Node instance "comb_6" instantiates undefined entity "CONNECT" Error: Node instance "comb_7" instantiates undefined entity "CONNECT" Error: Node instance "comb_8" instantiates undefined entity "CONNECT" です。 よろしくお願いします

  • VHDLのFF記述について

    お世話になります。VHDL同期FFの基本的な使い方で、今一イメージができない部分がありますのでご教示いただけたら有難いです。 次のようなVHDL記述で、 entity test is port (    CLK : in  std_logic;    xRST : in  std_logic;    A  : in std_logic;    B  : in std_logic;    X  : out std_logic;    Y  : out std_logic ); end; architecture RTL of test is signal  A_in: std_logic; signal  A_out: std_logic; signal  B_out: std_logic; begin    A_in <= A ;    X <= A_out;    Y <= B_out; process (CLK, xRST ) begin    if(xRST = '0')then       A_out <= '0';       B_out <= '0';    elsif (CLK' event and CLK ='1') then       A_out <= A_in;       B_out <= B;    end if;  end process; end; ・入力Aは一度A_inというsignalを通ってFF出力していて、この時出力XはAが1クロック分遅れて出力されます。 ・入力BはそのままFF出力しているのですが、出力YはAと同期して出力されます。 B-->Yのような場合、はFFがかからないのがなぜなのか、Aとの違いを教えていただけませんでしょうか? 初歩的な質問で恐縮ですが宜しくお願いいたします。

  • Verilogの文法

    Verilogの文法について、教えてください。 下のリストのように、if文をネストして2つのカウンタを作っています。 reg1が特定の値になったらreg2をカウントアップするという動作です。 ここで、リスト真ん中当たりの、reg2がカウントアップされるところで、 ネストしたif文(※1の箇所)のelseを入れると、そのif文の上(※2)が 実行されません。 Verilogの場合、elseは直前のif文に対応するはずなので、 影響してしまう理由が分かりません。 どなたか教えてください。 reg [9:0] reg1; // 水平レジスタ reg [9:0] reg2; // 垂直レジスタ always @(posedge clk25m or negedge rst_n) begin if(rst_n == 1'b0) begin // リセット reg1 <= 10'h000; reg2 <= 10'h000; end else if(clk25m == 1'b1) begin if(10'd800 < reg1) begin reg1 <= 10'h000; reg2 <= reg2 + 10'h001; // ※2 if(10'd600 < reg2) // ※1 reg2 <= 10'h000; // else // reg2 <= reg2; // コメントアウトしないと reg2 <= reg2 + 10'h001;(※2)が実行されない   end else reg1 <= reg1 + 10'h001; end else reg1 <= reg1; end

  • 「入門Verilog HDL記述」 の 一例について

    「入門Verilog HDL記述」を読みながらVerilog を勉強中なのですが、周りに聞ける人がいないので、質問させてください。 (ちなみに VHDL は習得しているつもりです。) いろいろ疑問点があるので、分けて何点か質問させていただきました。 改訂版 入門Verilog HDL記述の240ページのリスト II.5に generate ブロックと if 分についての以下のようなコードがありますが、 これは期待通りには動かないと思うのですが。。。 module sel2to1_2( input sel, input [3:0] d0, d1, output [3:0] dout ); parameter sel_type = 1; generate if(sel_type == 1) begin: sel_always reg [3:0] dout; always @* begin if(sel) dout <= d1; else dout <= d0; end end else if(sel_type == 2) begin: sel_cond wire [3:0] dout; assign dout = (sel == 1) ? d1 : d0; end endgenerate endmodule ModelSimでシミュレーションしてみましたが、generate文の中の reg [3:0] dout は generate 文の中のスコープでのみ定義されているらしく、 output [3:0] dout とは別の信号らしいです。よってoutputには何も代入されず。 試しに、xilinx の ISE でコンパイルしてみたが、やっぱり output には なにも接続されず、セレクタなんて生成されませんでした。 そもそも module sel2to1_2( input sel, input [3:0] d0, d1, output [3:0] dout ); reg [3:0] dout; みたいに書くと、2回宣言されているとなってエラーになります。 よって、参照ソースコードみたいに reg と wire を切り替えるような書き方はそもそもできないのでは? 皆さんどう思われますか? (インデントがうまくいかず、読みづらくてすいません。)

  • verilogである信号の数クロック遅れの信号を生成させる記述方法をお

    verilogである信号の数クロック遅れの信号を生成させる記述方法をお伺いします。 動作記述でOKです。 通常、「sig_a」 から2クロック遅れの「sig_b」を生成させるのなら: > sig_a - 2clockおくれ -> sig_b ----------------------------------- reg [2:0] regs; assign sig_b = regs[2]; asisgn regs[0] = sig_a; always @(posedge CLK) regs[2:0] <= {regs[1:0], sig_a}; ----------------------------------- のように、パイプラインに信号を通すことで実現できるですが、 何クロック遅れるかを可変(動的に設定する)としたいのです。 動作モデル的な記述で簡単にかけないのでしょうか? ------------------------------------ [NGの例]: これだとNcycle_delayがSIM途中で更新されたとき、反映できない。。。 initial begin  sig_b <= #D 1'b0;   while(1) begin   repeat(Ncycyle_delay) @(posedge CLK);    while(1) begin     sig_b <= sig_a;     repeat(1) @(posedge CLK);    end   end end ------------------------------------ 宜しくお願い致します。

専門家に質問してみよう