• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HDLプログラミングについて)

HDLプログラミングで3入力のレジスタを実現できない問題

このQ&Aのポイント
  • HDLプログラミングで3入力のレジスタを実現しようとしているが、コンパイルはできるものの正しく動作しない。
  • 原因がわからず困っている。おかしなところを指摘していただきたい。
  • 提供されたソースコードから、clearやclockのピンの設定が間違っている可能性がある。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ABELですか。話には聞いたことがあります。 以前は結構使われてたみたいですね。 でも、WEBで検索してもあまり出てこない・・・ もしかしたらこのサイトあたりが役に立つかもしれません。 http://www.page.sannet.ne.jp/je3nqy/abel/abel4.htm それから、シミュレーションをやっていないのであれば 実機の前にまず、シミュレーションで動作確認を行うのが 大前提です。 記述の間違いであれば大抵シミュレーションで見つけることができます。 いきなり実機でやると、変なポカをして何が原因なのか わからなくなることがよくあります。 極端な話、電源が入ってないとか、リセットの論理を 間違えてるとか、測定器が故障してるとか等々

参考URL:
http://www.page.sannet.ne.jp/je3nqy/abel/abel4.htm
AG-
質問者

お礼

>それから、シミュレーションをやっていないのであれば 実機の前にまず、シミュレーションで動作確認を行うのが 大前提です。 ご指摘ありがとうございます. シミュレーションソフトの方が手に入りそうなので, 1から見直してみます. また質問することになるかもしれないですが. この度はありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

このHDLはなんと呼ばれる言語ですか? VHDLやVerilogHDLならば使ったことがあるのでわかるのですが、この言語は使ったことがないので気になったところを一つ。 modeが[0,1]及び[1,0]の時の動作は記述されていますが、[0,0]や[1,1]の時の動作が記述されていないようです。 これはデフォルトで前値保持となるような言語仕様なのでしょうか? あと、こういう風に動作してほしいのにこういう動作をしてしまうといったことを書いていただければありがたいです。 また、それがシミュレーションか実機動作かも併せて教えてください。

AG-
質問者

補足

アドバイスありがとうございます. ABEL-HDLでコーディングしました.マイナーらしいですが… >modeが[0,1]及び[1,0]の時の動作は記述されていますが、[0,0]や[1,1]の時の動作が記述されていないようです。 これはデフォルトで前値保持となるような言語仕様なのでしょうか? 最近やりはじめたばっかりなのでいまいち分からないです… リファレンスとにらめっこしてみます. >こういう風に動作してほしいのにこういう動作をしてしまうといったことを書いていただければありがたいです。 また、それがシミュレーションか実機動作かも併せて教えてください。 すいません.少々説明不足だったようで… 私が望む動作としては3入力をそれぞれ1入力づつ記憶していき,それらをクロックによって立ち上げたり,クリアによって消去するものです. 実際ライターでPLD(GA16V8D)に書き込んでみたものの,まったく動作いたしませんでした. コンパイルは出来たので,恐らく文法の誤りでなく,コーディングそのものに間違いがあると考えてます.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VHDL 立ち上がり 立ち下がり両方検出

    VHDLで回路を記述する際に、立ち上がりと立ち下がりの両方を検出する際にはどうすればよいでしょうか? 立ち上がりだけなら if CLK_2M'event and CLK_2M='1' then とすればよいですが、立ち上がりと立ち下がりとなると、 if CLK_2M'event and CLK_2M='0' then elsif CLK_2M'event and CLK_2M='1' then と記述すると、うまくSynthesizeしてくれません。 また、 if CLK_2M'event then if CLK_2M='1' then elsif CLK_2M='0' then と書いてもエラーを出してしまいます。 エラーの内容は1番目のコードの場合はCLK_2Mに関係無い内容ですが、念のため乗せておきます。 1番目の場合 Signal ANSOUT<0> cannot be synthesized, bad synchronous description. ちなみにANSOUTというのはLEDに出力を出すためのsignalです signal ANSOUT : std_logic_vector(7 downto 0); LEDOUT <= ANSOUT; -- LEDOUTはLED出力用PIN 2番目の場合 line 39: unsupported Clock statement.

  • VHDL ステートにとどまる時間

    FPGAの初心者です。 上級者の皆さんがNET上に掲載されているVHDLの記述例をみながら勉強中です。 Q1. when detect => if(clk_rx = '1') then if(cnt_bitwidth = 7) then cnt_bitwidth <= 0; state <= proc; else cnt_bitwidth <= cnt_bitwidth + 1; state <= state; cnt_bitwidth = 0 でdetectステートに入ります detect ステートになってから clk_rxの1発目でcnt_bitwidthが1となり clk_rxの2発目でcnt_bitwidthが2となり ・・・・(中略) clk_rxの7発目でcnt_bitwidthが7となり clk_rxの8発目でcnt_bitwidthが7になっているので procステートへ入る ・・・と理解しました。 そうすると、 detectステートにとどまる時間はclk_rx の7周期分になります。 しかし動作から考えると detectステートにとどまる時間はclk_rx の8周期分でなければならない ・・・と思われるので前述の私の理解は間違っていると思います。 間違いを教えてください。

  • カウントダウン VHDL記述に困っています。

    入力側には、4Bit入力データバス、Clock、Reset 出力側には、4Bit出力データバス のカウントダウン回路のVHDLの記述にトライしているのですが、シミュレーションを行うと、期待通りの動作が得られません。 イネーブルは入れません。 参考に下記に記述を記載します。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity CNT_DOWN is port(D_IN : in std_logic_vector(3 downto 0); CLK, RST : in std_logic; D_OUT : out std_logic_vector(3 downto 0) ); end CNT_DOWN; architecture RTL of CNT_DOWN is D_OUT_TMP <= D_OUT; begin process(RST,CLK) begin if(RST='0') then D_OUT_TMP<=(others=>'0'); elsif(CLK'event and CLK='1') then if(D_OUT_TMP=D_IN) then D_OUT_TMP <= D_OUT_TMP - '1'; end if; end if; end process; end RTL; なのですが、きちんと動きません。 アドバイス下さい。

  • PICでのプログラミングについて教えて下さい。

    現在電圧計を製作していて4桁の7セグダイナミック点灯で行き詰っております(超初心者です)。 PICは16F873Aを使用、コンパイラはCCS、書き込みはピックライタ、あとシリアルデバッカを使用しています。 外部から電圧をかけそれをAD変換し、AD変換結果(0~5V)を7セグに表示させようとしています。 一応今の状態でも電圧表示はできていることはできているのですが一桁目から4桁目まで目で追えるくらい遅いスピードでこれを改善したいです。ソースは下記のソースを製作しました。この状態で3日間悩んでおります...知恵をお貸しいただけないでしょうか。 よろしくお願いします。 #include <16F873a.h> #device ADC=10 //A/D変換10bitモード #use fast_io(A) /* TRISレジスタの設定が必要 */ #use fast_io(B) #use fast_io(C) #use delay (clock=10000000) //10MHz #use RS232( BAUD = 9600, XMIT = PIN_C6, RCV = PIN_C7, PARITY = N, BITS = 8 ) #fuses HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #define VOLTAGE PIN_A0 // (in) #define CORRENT PIN_A1 // (in) #define VREF1 PIN_A2 // (in) #define VREF2 PIN_A3 // (in) #define RESERVE1 PIN_A4 // (out) #define RESERVE2 PIN_A5 // (out) #define LED_DP PIN_B0 // (out) #define LED_A PIN_B1 // (out) #define LED_B PIN_B2 // (out) #define LED_C PIN_B3 // (out) #define LED_D PIN_B4 // (out) #define LED_E PIN_B5 // (out) #define LED_F PIN_B6 // (out) #define LED_G PIN_B7 // (out) #define DIG_0 PIN_C0 // (out) #define DIG_1 PIN_C1 // (out) #define DIG_2 PIN_C2 // (out) #define DIG_3 PIN_C3 // (out) #define INI_TRIS_A_VAL 0x0F // 7:x 6:x 5:out 4:out 3in 2:in 1:in 0:in #define INI_TRIS_B_VAL 0x00 // 7:out 6:out 5:out 4:out 3out 2:out 1:out 0:out #define INI_TRIS_C_VAL 0x80 // 7:in 6:out 5:out 4:out 3:out 2:out 1:out 0:out int ct;//数字の更新間隔 long val;//表示する数字 int digit;//表示する桁 //表示パターン int segment_data[]={0x81,0xF3,0x49,0x61,0x33,0x25,0x05,0xF1,0x01,0x31}; char st[4]; void main() { float ata1,data2,data3,data4; long data5; long val; SET_TRIS_A( INI_TRIS_A_VAL ); SET_TRIS_B( INI_TRIS_B_VAL ); SET_TRIS_C( INI_TRIS_C_VAL ); setup_adc_ports(AN0_AN1_VSS_VREF); setup_adc(ADC_CLOCK_DIV_32); //Fosc/32 最高速度 digit=0; ct=1;//数字を更新する周期 val=0;//表示する値 while(1) { output_low(RESERVE2); //動作ランプ //////////////////////電圧測定///////////////////////////////// set_adc_channel(0); delay_us(50); //アクイジションタイム待ち(マイクロ秒) data1 = read_adc(); //AD変換結果読み込み printf("ADC V %9.3f \r\n", data1 ); //AD変換データ表示 data2 = (data1 * 4.959695) / 1024; //BCDに変換 printf("Volt %6.3f \r\n", data2 ); //変換データ表示 data5 = data2 * 1000 ; //data2を整数に変換 val = data5 ; printf("val %ld \r\n", val); //整数にし表示 /////////////////////7SEG表示////////////////////////////////// ct --; if(ct == 0){//数字の更新 st[3]=val/1000; //4桁目数値取り出し st[2]=val/100-st[3]*10;//3桁目数値取り出し st[1]=val/10-((st[3]*100)+(st[2]*10));//2桁目数値取り出し st[0]=val%10;//あまり val++; if(val==1000) val=0; ct=20; } if(digit== 3){//第4桁の表示 output_b( segment_data[st[3]]); output_bit(DIG_0,1);  //4桁表示開始 output_low(LED_DP);  //小数点表示  delay_us (5); //表示期間(ミリ秒) output_bit(DIG_0,0); //表示を消す output_high(LED_DP); //小数点を消す delay_us(50); //待ち(マイクロ秒) } if(digit== 2){ output_b( segment_data[st[2]]); output_bit(DIG_1,1); delay_ms (5); output_bit(DIG_1,0); delay_us(50); } if(digit== 1){ output_b( segment_data[st[1]]); output_bit(DIG_2,1); delay_ms (5); output_bit(DIG_2,0); delay_us(50); } if(digit == 0){ output_b( segment_data[st[0]]); output_bit(DIG_3,1); delay_ms (5); output_bit(DIG_3,0); delay_us(50); } digit ++;//表示桁を変更 if(digit ==4 ) digit=0; } }

  • VBA 数字と文字の判断について

    VBA 数字と文字の判断について Excel2000を使用しています。 ユーザーフォームのテキストボックスに A00B0.5C-3.0 というように入力してコマンドボタンのOKなどを押すとセルのA1に00 B1に0.5 C1に-3.0 と表示させたいのですが、下記のマクロを使用すると、 A1に00 B1に0 C1に5 D1に3 E1に0 というように、「-」と「.」も文字と認識してしまい分かれて表示されてしまいます。 セルの位置にはこだわりませんが、連続で 00 0.5 -3.0 と表示させるにはどうしたらよろしいでしょうか? Dim re As Object Dim d() As String Set re = CreateObject("VBScript.RegExp") re.Pattern = "¥D+(¥d+)" re.Global = True d = Split(Trim(re.Replace(tx1.Text, "$1 ")), " ") If UBound(d) > 10 Then Selection.Resize(1, UBound(d) + 1) = d Set re = Nothing   よろしくお願いします。

  • ( )内の意味教えてください

    when I red the song I remember him and some memories and then I red about when your grandpa died,you are of the same mind set. (will 〇 know who "him"is? If not replace "him" with persons name) 〇は人の名前です。 〇さんは彼が誰か知ってる??? もし知らないなら名前と取り替えた方がいいよ お願いします。

  • この路線で目的地まで行きたいのですが?料金おしえて

    http://www.excite.co.jp/transfer/search/result?SF=5119&ST=4411&submit=%81@%8C%9F%81@%8D%F5%81@&time.Y=2010&time.m=2&time.d=15&time.H=6&time.M=30&SR=0&RP=2&PN=20&EP=0&AIR=0&search_mode=detail&page_query=SF%3D%2589%25CD%2593%25E0%2592%25B7%2596%25EC%26ST%3D%2595x%258Bg%26submit%3D%2581@%258C%259F%2581@%258D%25F5%2581@%26time.Y%3D2010%26time.m%3D1%26time.d%3D21%26time.H%3D6%26time.M%3D30%26SR%3D0%26RP%3D0%26PN%3D20%26EP%3D0%26AIR%3D0%26search_mode%3Ddetail 上記サイトの経路4です!お間違いなく御願いします経路4です! これは大和八木から桑名までの特急料金は別途かかるんですか?

  • H8マイコンについての質問です

    現在H8マイコンでプログラムを実施しようと 思っております。 秋月電子のマザーボードにマイコンH3052Fを接続して、 PCからマザーボードにプログラムで書き込みをしようと 思っております。 書き込み方法については、HEW4、FDT4.08を使用する予定です。 HEW4でプログラムファイルをmotファイルまで作成して、 FDT 4.08でマイコンに書き込もうと思いますが、 Device H8/3052F PORT E8DIrect の設定でスタートしましたが、下記のようなエラーがでてしまって、 書き込めません。 エラー内容 Power will be set to 5.0v Opening port 'E8DirectPrepare' ... No E8 found to re-enumerate, looking for already re-enumerated E8Direct... Error No 17657: E8Direct/E8aDirectは見つけられませんでした Clock Frequency (External) = 25.0000MHz, Clock Mode = 0, CKM = 1, and CKP = N/A Connecting to device 'H8/3052F' on 'E8Direct' Configuration: 'BOOT Mode' connection - using emulated interface Opening port 'E8Direct' ... Error No 15026: 通信ポートがオープンできません PCは富士通のBIBLO LOOX M/G30を使用しており、windows7です。 現在推定する原因としては、接続がうまくいっていないのではと 考えております。 USBを使用して、接続をしておりますが、FDTのマニュアルをみたところ E8DirectはUARTと記載ありました。 UARTてなんですか?通常のUSB接続ではないのでしょうか? また、マザーボードにはRS-232Cもありますので、こちらで接続できるのでしょうか? ちなみにPCには、15pinの外部ディスプレイコネクタがあります。 マザーボードの方はRS-s232C 9pin(たぶんシリアル)なのですが、 15pinの外部ディスプレイコネクタと接続できますでしょうか? また、RS-s232C 9pinをUSBに変換できるコネクタはもっておりますが、 このUSBに接続して試しましたが、だめでした。 FDTのポートの接続方法について教えてください。 また、RS-s232C 9pinを接続する場合は、電源必要でしょうか? いろいろと質問して申し訳ないですが、教えてください。

  • 英文通訳出来る人いませんか?

    先日、海外品機器購入したんですが、日本語説明書付となっていたものの、商品のアピールだけで、操作方法が書かれていませんでした。 試しにいじってみたんですが、思うように設定できません。 次の内容が解読出来ればいいんですが、通訳ソフトの内容では、不十分なので、理解出来ませんでした。 親切な方、教えて頂けないでしょうか? a) clear: used with the mode button to enter the programming mode. b) mode: used with the clear button to enter the programming mode and to scroll through the different modes. c) up/down: The arrow up / down button is used to change the program set points. d) enter: accept the changes and stores the settings. To change the set point: 1) Press and hold the (clear) and (mode) buttons for 5 seconds. 2) Now press the (mode) button nine times to display the current set point. (RELAY is displayed) 3) Use the (up) and (down) arrow buttons to change the set point. 4) Press (enter) to accept the change. 5) Press (clear) to return the unit to RUN mode. (CO2 ____PPM is displayed)

  • 電場

    問題 A clock face has charges q, 2q, 3q, 4q, 5q, ... , 12q fixed at the positions of the corresponding numerals. At what time does the hour hand point in the same direction as the electric field vector at the center of the dial? (Hint: Draw a diagram, use symmetry) 時計の数字に沿って電荷を配置した場合の電解の向きを求めたいのですが。模範解答も計算過程や図解説が全く無くかなり理解に苦しんでいます。   答えは以下のようになります。 Look at opposite numbers on the clock. The charges will produce opposite electric fields at the center and thus will cancel pairwise, the net electric field vector ~E points away from positive charges and so between the 3 and the 4 on the clock. Thus the time will be 3:30 when the hour hand points in the direction of the field. 皆さんのお力を貸してください、お願いいたします。