国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 4175|回復: 7
打印 上一主題 下一主題

[提問] 新手 求助 T T

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2011-11-18 11:14:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關鍵詞: 并轉串
35積分
小弟剛開始學習CPLD,編寫程序時候遇到個問題沒辦法解決 跪求高手助我!!!
      要求的功能是這樣的,(8位)并形信號轉換為串形信號。并形信號在CS拉低時鎖存,CS拉低之后的CLK觸發將鎖存的信號在一個引腳串形輸出。
      另外,CS拉高以后要忽略CLK信號,而CS在低位時的CLK 的數量不一定為8。
      要用VERILOG,實現。


      小弟嘗試過幾種辦法均告失敗,似乎問題出現在CS拉低和CLK拉高時的連接沖突。

沙發
發表于 2011-11-18 11:51:48 | 只看該作者
寫出你的程序來讓大家看看呀
板凳
 樓主| 發表于 2011-11-18 12:40:22 | 只看該作者
哦  抱歉  代碼 寫了挺多種的 下面發幾個  多謝各位大俠了!:}
地板
 樓主| 發表于 2011-11-18 12:59:45 | 只看該作者
module spi02(  data,clk,cs,miso_o   );

//input
input    clk;
input    cs;
input [7:0]  data;
wire [7:0]  data;
//output
output   miso_o;
reg           miso_o;
//reg
reg [2:0]  counter;
reg [7:0]  data_read;

always@(negedge  cs)   //cs下降沿出發并形數據載入
begin
                        data_read[0]<= data[0];
                        data_read[1]<= data[1];
                        data_read[2]<= data[2];
                        data_read[3]<= data[3];
                        data_read[4]<= data[4];
                        data_read[5]<= data[5];
                        data_read[6]<= data[6];
                        data_read[7]<= data[7];       
end


always@(posedge clk)   //cs的下降沿中的CS出發串行行輸出
begin
        if(!cs)
        begin
                data_read <= {data_read[6:0],1'b0}; //移位
                miso_o<=data_read[7];
        end
end

endmodule

這是最初的代碼,直接了當的描述要實現的功能。但是編譯時報如下錯
Error (10028): Can't resolve multiple constant drivers for net "data_read[7]" at spi02.v(33)
Error (10029): Constant driver at spi02.v(18)
Error (10028): Can't resolve multiple constant drivers for net "data_read[6]" at spi02.v(33)
Error (10028): Can't resolve multiple constant drivers for net "data_read[5]" at spi02.v(33)
Error (10028): Can't resolve multiple constant drivers for net "data_read[4]" at spi02.v(33)
。。。。。。
地下室
 樓主| 發表于 2011-11-18 13:10:57 | 只看該作者
看上去錯誤似乎是 兩個ALWAYS事件中都對data_read 的連接方式作出要求,而且這兩種連接方式有沖突。

因此,我增加了一個FLAG 來避免沖突。程序如下:
module spi02(
           
                   data
                   ,clk,cs,miso_o           
                        );
//input
input    clk;
input    cs;
input [7:0]  data;
wire [7:0]  data;
//output
output   miso_o;
reg           miso_o;
//reg
reg [2:0]  counter;
reg [7:0]  data_read;
reg            flag;

always@( negedge   cs   )
begin
       
                        data_read[0]<= data[0];
                        data_read[1]<= data[1];
                        data_read[2]<= data[2];
                        data_read[3]<= data[3];
                        data_read[4]<= data[4];
                        data_read[5]<= data[5];
                        data_read[6]<= data[6];
                        data_read[7]<= data[7];
                        flag<=1'b1;  //flag至1
       
end

always@( posedge   cs   ) //flag至0
begin
        flag<=1'b0;
end
always@(posedge clk)
begin
        if((!cs)&&flag)
        begin
                data_read <= {data_read[6:0],1'b0};
                miso_o<=data_read[7];
        end
end

endmodule

我希望通過  FLAG來告訴他當 兩個觸發同時發生時 先做哪個。但是好像不起作用。
報錯還多了一個:
Error (10028): Can't resolve multiple constant drivers for net "flag" at spi02.v(34)
6
 樓主| 發表于 2011-11-18 13:28:10 | 只看該作者
最后我索性把 兩個信號放在一個ALWAYS里



always@(    cs  or clk )
begin
        if (!cs)
        begin
                if(!flag)
                begin
                        data_read[0]<= data[0];
                        data_read[1]<= data[1];
                        data_read[2]<= data[2];
                        data_read[3]<= data[3];
                        data_read[4]<= data[4];
                        data_read[5]<= data[5];
                        data_read[6]<= data[6];
                        data_read[7]<= data[7];
                        flag<=1;
                end
            else
            begin
                        data_read <= {data_read[6:0],1'b0};
                        miso_o<=data_read[7];
                end
        end       
        else
        begin
        flag<=1;
        end       
       
end

endmodule
7
 樓主| 發表于 2011-11-18 13:30:03 | 只看該作者
沒有報錯 但是仿真無法得到波形!!!


各位路過的師傅們幫幫忙啊!
小弟剛進壇子,只有點積分獎勵,跪謝了!!!
8
發表于 2015-2-16 19:18:31 | 只看該作者
頭皮發麻..... fpga的邏輯觀念比c更嚴謹

`define datalen  (8-1)

module spi02(  reset, data, clk, cs, miso_o   );
//input
input reset
input    clk;
input    cs;
input [7:0]  data;
//wire [7:0]  data;
//output
output   miso_o;
reg        out;
//reg
reg [2:0]  counter;
//reg [7:0]  data_read;

assign miso_o <= out;

always@(posedge clk or reset)   //cs的下降沿中的CS出發串行行輸出
begin
   // init
   if(reset) begin
     counter = 0;
   end

     if(!cs)  begin
        out  <= data[datalen-counter];
        if(counter = datalen) counter = 0;
        else counter = counter+1;
     else
       counter = 0;
     end
end

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 18美女福利视频网站免费观看 | 六月婷婷激情综合 | 一级做a爰片欧美一区 | 亚洲一区中文字幕 | www成人国产在线观看网站 | 日韩毛片 | 免费99视频有精品视频高清 | 亚洲无吗在线视频 | 日本精品视频一区二区三区 | 久久麻豆精品 | 清纯唯美亚洲综合欧美色 | 亚洲视频精品在线观看 | 成人特黄午夜性a一级毛片 成人四虎影院 | 亚洲资源在线 | 妻子的诱惑在线免费观看正片 | 欧美精品九九99久久在观看 | 中文字幕一区二区三区免费视频 | 久久精品国产免费一区 | 99热这里只有精品在线播放 | 欧美三级蜜桃2在线观看 | 在线看一区 | 成人尤物 | 热灸灸这里只有精品 | 久久午夜羞羞影院免费观看 | 亚欧乱色视频 视频在线 | 日韩美一区二区三区 | 69av导航| 四虎在线精品观看免费 | 91精品啪在线观看国产 | 日韩成人在线网站 | 亚洲综合激情 | 99精品免费 | 久久国产亚洲欧美日韩精品 | 国产精品高清在线观看 | 久草大 | 国产成人精品日本欧美动漫 | 国产精品资源在线观看网站 | 日韩娇小性hd | 一区二区三区在线免费观看视频 | 男女视频网站在线观看 | 伊人网站 |