音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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

問一個Verilog語法方面的問題?想不通了。。。。。。。。。

作者:wag 欄目:EDA技術(shù)
問一個Verilog語法方面的問題?想不通了。。。。。。。。!
請大蝦看看就是下面這點東西:
    設(shè)計意圖是address=0x02讀入16位的低8位address=0x03讀入高8位同時合并輸出給數(shù)據(jù)總線data,address=0初始化總線允許讀,address=其他允許總線寫,在發(fā)送address=0x02和0x03前必須先允許寫。下面是相關(guān)代碼:
    always @(posedge clk)    //寫入
     begin
       case (address)
              8'h01 :
              begin
                     we=0;                  
              end
              8'h02 :
              begin   
                      TEMP=databus;
              end
              8'h03 :
              begin
                    addr=addr+1;
                    data={databus,TEMP};
              end
                            
              default :  
              begin
                     we=1;
                     //TEMP=0; //問題就在這里加這條語句和不加得到不同的答案
                     addr=0;   
                     data=0;
              end
       endcase
    我現(xiàn)在就對點被case模塊感到不清楚了,我仿真的感覺是模塊執(zhí)行的條件很亂,不是我認(rèn)為address=0x03就執(zhí)行
              8'h03 :
              begin
                    addr=addr+1;
                    data={databus,TEMP};
              end
是否還執(zhí)行了其他的呢?不懂,真的有點不懂?

2樓: >>參與討論
canoeheu
什么亂東東??
建議你先找本書來看看,不但要知道基本語法還要知道實際的電路和語言之間有什么聯(lián)系。你的思維太亂了


3樓: >>參與討論
greenskie
你的代碼經(jīng)過編譯器編譯已經(jīng)不是你想實現(xiàn)的電路了
我給你說兩個有關(guān)case segment的使用的問題:
    第一,如果你沒有對default進行定義,那么在case中使用的寄存器將變成鎖存器輸出,而不是簡單的組合邏輯電路。
    第二,你定義了default的情況下的電路實現(xiàn),但是在某種情況下,你對某些變量沒有做處理,編譯器將會把這個變量當(dāng)作鎖存器(latch)輸出,這正好可以解決default情形中的加TEMP=0和不加TEMP=0的區(qū)別,當(dāng)你在default中加了TEMP=0以后,那么在default情形下TEMP=0,沒加的情形就是TEMP保持先前一個狀態(tài)不變。
    像你的address=0x03的情形由于we這個變量沒有在此情況下以及address=0x02和default情況下賦一個確定的值,編譯器就會把we當(dāng)成鎖存器,因此,在執(zhí)行address=0x03這種情況時,we仍然保持先前一個狀態(tài)的值,如果先前一個狀態(tài)we=0,那么你就沒有辦法將數(shù)據(jù)給data.
    這只是我的理解,希望對你有幫助。

4樓: >>參與討論
WAG
很感謝greenskie!再琢磨琢磨你的意見,,謝謝!
 
5樓: >>參與討論
WAG
對,你說得真確,Verilog語法應(yīng)該這樣,是我理解的問題?
   問題應(yīng)該出在10K10 EAB的讀寫上,請看下面的內(nèi)容(我的這個帖子,圖片在這個帖子中有):
“一個很沒有道理的程序Verilog,10K10 EAB的異步讀寫,附圖和Code!”
//==========================================================
程序說明,以下是我寫的EAB讀寫完整的程序,程序的確很亂,不過通過了仿真,可是很多東西我自己都不明白為什么,如果哪位DX有時間可以仿真看看。
    以下是不明白的地方:
    這里我有兩個問題想先請教:
      問題1:
      為什么可以初始化addr而不能初始化data(最后的default分支也一樣)
                8'h00 :
             begin
                    we=1;
                    addr=0;
                    //data=0;
             end
       問題2:
       假如我把下面的分支從case分支中刪除,仿真結(jié)果也不一樣,我就不知道為什么,我看了verilog的語法是否這樣是沒有問題的,那究竟為什么呢?
                 8'h09:
             begin
                    d3=bus_data;
             end
//==========================================================================    
MODULE a (wr,bus422,bus_addr,bus_data,q,a1,a2,a3,led,d1,d2,d3);

    input           wr;
    input   [5:0]   bus422;
    input   [7:0]   bus_addr;
    OUTPUT  [15:0]  q;
    OUTPUT  [7:0]   a1,a2,a3;
    OUTPUT          led;
    OUTPUT  [7:0]   d1,d2,d3;
      
    input   [7:0]   bus_data;
   
    reg     [7:0]   TEMP;  
    reg     [15:0]  data;
    wire    [5:0]   address;
    reg     [5:0]   addr;
    reg             we;
    reg     [7:0]   a1,a2,a3;
    reg     [7:0]   d1,d2,d3;
    reg             led;
    reg             ab;

    assign address=we?addr:bus422;   //讀出

    lpm_ram_dq    lpm_ram_dq_component (.address (address),.data (data),.we (we),.q (q));
    defparam
        lpm_ram_dq_component.lpm_width = 16,
        lpm_ram_dq_component.lpm_widthad = 6,
        lpm_ram_dq_component.lpm_indata = "UNREGISTERED",
        lpm_ram_dq_component.lpm_address_control = "UNREGISTERED",
        lpm_ram_dq_component.lpm_outdata = "UNREGISTERED",
        lpm_ram_dq_component.lpm_hint = "USE_EAB=ON";

    always @(posedge wr)    //寫入
     begin
       case (bus_addr)
              8'h00 :
              begin
                     we<=1;
                     addr<=0;
                     //data<=0;
              end
              8'h01:
              begin
                     led<=~led;
              end
              8'h02 :
              begin   
                     TEMP<=bus_data;
                     addr<=addr+1;
              end
              8'h03 :
              begin
                     data<={bus_data,TEMP}; //從單元1開始
              end
              
              8'h04:
              begin
                     a1<=bus_data;ab=0;
              end
              8'h05:
              begin
                     a2<=bus_data;ab=1;
              end
     
6樓: >>參與討論
wag
其實最關(guān)鍵的東西是,我在ALTERA公司上沒有找到EAB異步讀寫的時序
   資料上只有異步讀寫不使用輸入寄存器的情況,但是使用了的就沒有.

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
HDB3、2FSK編碼的EDA設(shè)計,求助,應(yīng)該怎么搞,我沒有頭緒啊
xilinx的FPGA xc3s1500的。膐ne。校桑巍≡趺词歉唠娖
怎樣用cpld實現(xiàn)一個12位的地址發(fā)生器呀
一個很沒有道理的程序Verilog,10K10 EAB的異步讀寫,附圖和Code!
求教
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號