| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
請各位前輩幫我看看下面的程序…… | 
  
| 作者:zhoumcu 欄目:EDA技術(shù) | 
各位前輩,幫我看看,下面的程序,我剛開始學(xué),想做個簡單的音樂程序;舅悸肥牵 clkt:是外部時鐘,4Hz,作為時間的基本時鐘,以該時鐘計數(shù)后得到一定的延時 以決定不同的音長 clkf:是外部時鐘,3MHZ,作為音高的基本時鐘,對該時鐘經(jīng)過分頻后得到不同頻 率。 PROCESS(clkt)是延時進程 PROCESS(clkf)是音高生成進程 PROCESS(timeok)是延時時間到進程,以改變clkf及clkt的分頻數(shù) 編譯錯誤為: error:LINE 20: file e:\TEMP\eda\sound_my\sound.vhd: bounds of non-constant index addressing array reaches beyond the bounds of the array library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sound is PORT( clkt,clkf: in std_logic; spk: out std_logic ); end sound; architecture behave of sound is type mnum is array (0 to 7) of integer range 0 to 255; signal fnum,tnum: mnum; signal f,t: integer range 0 to 8 :=0; signal fTEMP,tTEMP: integer range 0 to 255 := 0; signal timeok : std_logic; begin PROCESS(clkt) begin if rising_edge(clkt) then tTEMP <= tTEMP + 1; if (tTEMP = tnum(t)) then timeok <= timeok xor '1'; tTEMP <= 0; end if; end if; end PROCESS; PROCESS(clkf) variable spkTEMP: std_logic; begin if rising_edge(clkf) then fTEMP <= fTEMP + 1; if fTEMP = fnum(f) then spkTEMP := spkTEMP xor '1'; fTEMP <= 0; end if; end if; spk <= spkTEMP; end PROCESS; PROCESS(timeok) begin f <= f +1; t <= t +1; if t = 8 then t <= 0; end if; if f = 8 then f<= 0; end if; end PROCESS; fnum(0) <= 10#20#; fnum(1) <= 10#50#; fnum(2) <= 10#70#; fnum(3) <= 10#90#; fnum(4) <= 10#30#; fnum(5) <= 10#9#; fnum(6) <= 10#197#; fnum(7) <= 10#23#; tnum(0) <= 10#10#; tnum(1) <= 10#2#; tnum(2) <= 10#1#; tnum(3) <= 10#2#; tnum(4) <= 10#4#; tnum(5) <= 10#5#; tnum(6) <= 10#7#; tnum(7) <= 10#1#; end behave;  | 
  
| 2樓: | >>參與討論 | 
| 作者: gao827 于 2005/5/7 12:16:00 發(fā)布:
         你的fnum,tnum是array(0 to 7),而f和t的取值范圍為0 to 8 當(dāng)f,t = 8的時候就超出范圍了  | 
  |
| 3樓: | >>參與討論 | 
| 作者: zhoumcu 于 2005/5/7 19:48:00 發(fā)布:
         很感謝,不過有另外的問題了 謝謝gao827,不過,現(xiàn)在有62個錯誤,其中的一個是: node "fnum4_1" missing source 其余61個錯誤和這個差不多。錯誤指向 singal fnum,tnum :mnum;該句。  | 
  |
| 4樓: | >>參與討論 | 
| 作者: qjc.j 于 2005/5/7 20:01:00 發(fā)布:
         也幫我一下 MODULE hu (clk,data_out,control_out); input clk; OUTPUT[3:0] data_out; OUTPUT[2:0] control_out; reg[3:0] data_out; reg[2:0] control_out; reg[4:0] temp_1,temp_2,temp_3,temp_4,temp_5,temp_6,temp_7,temp_8; reg[7:0] count; reg[19:0] count_0; always @(posedge clk) begin count=count+1; if(count==255) begin count=0; control_out=control_out+1; if(control_out==3'b000) #10 data_out=temp_1; if(control_out==3'B001) #10 data_out=temp_2; if(control_out==3'B010) #10 data_out=temp_3; if(control_out==3'b011) #10 data_out=temp_4; if(control_out==3'B100) #10 data_out=temp_5; if(control_out==3'B101) #10 data_out=temp_6; if(control_out==3'B110) #10 data_out=temp_7; if(control_out==3'b111) #10 data_out=temp_8; end end endMODULE 問題是編譯一半時就不行了, Error: Nide '76.IN2'missing soure Error: Nide '77.IN2'missing soure ...... ...... ...... Error: Nide '161.IN2'missing soure Error: Nide '162.IN2'missing soure Error: Nide '163.IN2'missing soure 那位前輩給解釋一下.  | 
  |
| 5樓: | >>參與討論 | 
| 作者: gao827 于 2005/5/7 20:42:00 發(fā)布:
         說一下qjc.j的問題 這個程序問題太多了。 首先你的Error是因為你的temp_1~8這幾個變量都是沒有賦值的,它們既不是輸入,你的程序理由從沒給他們賦值過,當(dāng)然是sourceless的。 其次你的程序用延遲#10,這是不可綜合的,如果你做testbench還可以; 然后時序邏輯沒有復(fù)位,count沒有初始值; 然后你所有的賦值都是用的阻塞賦值,這樣程序就亂套了;舉例來說:如果count=254,count=count+1這句之后count立即變成255,然后進入if塊中count又被立即賦值為0,這樣count這個信號就出來一個毛刺,而且這個邏輯肯定不是你想要得,功能完全亂了。 接下來這么多的if其實應(yīng)該用case語句來實現(xiàn)。if在綜合的時候是有優(yōu)先級的,排在前面的優(yōu)先級就高,而case沒有,所以它兩個綜合出來的邏輯是不一樣的。 總之,還是要好好看看書再動手時,可能效率會高一些。  | 
  |
| 6樓: | >>參與討論 | 
| 作者: gao827 于 2005/5/7 20:44:00 發(fā)布:
         to: zhoumcu 抱歉VHDL我沒用過,沒法回答你  | 
  |
| 7樓: | >>參與討論 | 
| 作者: qjc.j 于 2005/5/8 16:12:00 發(fā)布:
         多謝 gao827 我用的MAX-plus II 不支持 好多命令,我也用Quartus 4.2 編譯過,但是不知道怎樣用它下載的.請教gao827用Quartus 4.2怎樣下載程序的.  | 
  |
| 8樓: | >>參與討論 | 
| 作者: 84082379 于 2005/5/9 20:15:00 發(fā)布:
         給他植就可以了  | 
  |
| 9樓: | >>參與討論 | 
| 作者: 84082379 于 2005/5/9 20:44:00 發(fā)布:
         fnum tnum 有問題  | 
  |
| 10樓: | >>參與討論 | 
| 作者: qjc.j 于 2005/5/11 20:03:00 發(fā)布:
         多謝 gao827前輩 再問一下是 Quartus 好用還是 MAX-plus II 好用.  | 
  |
| 11樓: | >>參與討論 | 
| 作者: wuzm02 于 2005/5/11 23:05:00 發(fā)布:
         誰有Quartus 4.2,能否分享一下? 誰有Quartus 4.2,能否分享一下? thanks all the same;  | 
  |
| 12樓: | >>參與討論 | 
| 作者: gao827 于 2005/5/12 14:39:00 發(fā)布:
         to qjc.j 抱歉,ALTERA的工具我沒用過,只用過XILINX和LATTICE的,你另發(fā)個帖子問問吧。  | 
  |
| 13樓: | >>參與討論 | 
| 作者: qjc.j 于 2005/5/12 16:07:00 發(fā)布:
         多謝 gao827前輩 多謝您的支持.我會繼續(xù)努力的.  | 
  |
| 14樓: | >>參與討論 | 
| 作者: qjc.j 于 2005/5/12 16:15:00 發(fā)布:
         wuzm02 QQ;50427587  | 
  |
| 15樓: | >>參與討論 | 
| 作者: delli 于 2005/5/13 20:31:00 發(fā)布:
         gao827說的很好啊,補充一下 case也是有優(yōu)先級的,用SELECT.  | 
  |
| 16樓: | >>參與討論 | 
| 作者: Lyang03 于 2005/5/14 19:16:00 發(fā)布:
         請問case的優(yōu)先級別是什么樣的呀?  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號  |