打印
[verilog]

总线式读写问题,求帮助???

[复制链接]
1894|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我弄这个Verilog语言已经三个月了,但是对于总线读写一直没有成功,求帮我看看怎么回事?

我所谓的总线读写就是像,片外ram一样读写,有一个数据总线;data0:data15  ;地址总线:addr0:addr15;还有片选CS 写WE  读OE 就这些吧? 我现在只能实现写的功能,读的功能一直没有实现,求帮助,谢谢了!

我可能还没有弄得inout 这个功能的实现吧,帮我看一下我哪里出错了,谢谢

相关帖子

沙发
meng219902|  楼主 | 2014-3-20 16:58 | 只看该作者
module dsp_cpld(
    in_addr,
    in_dsp_cs,
    in_rd_cpld,
//    nPXWE,
    inout_cpld_data,
    out_Xint1,           //dsp外部中断信号
    out_Xint2,   //dsp外部中断信号
    in_clk,    //全局时钟
    in_dsp_we,   //DSP的WE写使能信号
   
    );
parameter dspAddBit = 7;     
parameter dspDatBit = 15;
input in_clk;   
input   in_dsp_cs;
input   in_rd_cpld;
input in_dsp_we;
//input   nPXWE;
input [dspAddBit:0] in_addr;
inout [dspDatBit:0] inout_cpld_data;
output   out_Xint1;           //dsp外部中断信号
output   out_Xint2;   //dsp外部中断信号

reg temp_flag;
reg readOK_flag;
reg [dspDatBit:0]  temp_cpld_data [0:15];  // W_RAM[0x7d:0x8F]
reg [dspDatBit:0] out_cpld_data;
wire [dspDatBit:0] inout_cpld_data;
assign inout_cpld_data = temp_flag?out_cpld_data:16'hzzzz;
always @(in_dsp_cs or in_rd_cpld or in_dsp_we or in_addr)
begin
   if(1'b0==in_dsp_cs)
   begin
       if(1'b0==in_rd_cpld)
       begin
        case(in_addr)
     8'h00:
      begin
      if(readOK_flag==1)
       out_cpld_data<=16'h1234;
       else
       out_cpld_data<=16'h6050;
//      temp_flag<=1;
      end
        8'h01: out_cpld_data<=16'h6010;
        8'h02: out_cpld_data<=16'h6020;
        8'h04:
            begin
     if(temp_cpld_data[0]==16'h5050)
      out_cpld_data<=16'h1234;
     else
      out_cpld_data<=16'h6020;
    end
        8'h05: out_cpld_data<=16'h6020;
        8'h06: out_cpld_data<=16'h6020;
        8'h07: out_cpld_data<=16'h6020;
        8'h08: out_cpld_data<=16'h6020;
        8'h22: out_cpld_data<=16'h6030;
        8'h23:
            begin
    if(temp_cpld_data[2]==16'h5050)
       out_cpld_data<=16'h2222;
     else
       out_cpld_data<=16'h5555;
      end
        default : ;
        endcase
        temp_flag<=1;
    end
   
//    else
//    begin
//         out_cpld_data<=16'hzzzz;
//      end
       else if(1'b0==in_dsp_we)
        begin
//        in_addr<=in_addr-16'h80;
//     temp_flag<=0;
        case(in_addr)
     8'h81: temp_cpld_data[0]<=inout_cpld_data;
     8'h82: temp_cpld_data[1]<=inout_cpld_data;
     8'h83: temp_cpld_data[2]<=inout_cpld_data;
     8'h84: temp_cpld_data[3]<=inout_cpld_data;
     8'h85: temp_cpld_data[4]<=inout_cpld_data;
     8'h86: temp_cpld_data[5]<=inout_cpld_data;
     8'h87: temp_cpld_data[6]<=inout_cpld_data;
     8'h88: temp_cpld_data[7]<=inout_cpld_data;
     8'h89: temp_cpld_data[8]<=inout_cpld_data;
        default : ;
        endcase
    temp_flag<=0;
      end      
   end
   else
   begin
        temp_flag<=0;
   end  
end
endmodule  

使用特权

评论回复
板凳
meng219902|  楼主 | 2014-3-20 16:59 | 只看该作者
这个程序是cpld与DSP的XINTF 进行总线通信的,可以写,但是不可以读,如果需要的人,就把读功能删了,就可以了

使用特权

评论回复
地板
ifpga| | 2014-3-20 22:30 | 只看该作者
这么乱的代码看起来实在是种煎熬

使用特权

评论回复
5
yghanwuji| | 2014-3-20 23:17 | 只看该作者
inout,有没有在顶层做三态总线

使用特权

评论回复
6
meng219902|  楼主 | 2014-3-21 21:18 | 只看该作者
yghanwuji 发表于 2014-3-20 23:17
inout,有没有在顶层做三态总线

您说的是这个吗??
assign inout_cpld_data = temp_flag?out_cpld_data:16'hzzzz;

使用特权

评论回复
7
meng219902|  楼主 | 2014-3-21 21:19 | 只看该作者
ifpga 发表于 2014-3-20 22:30
这么乱的代码看起来实在是种煎熬

确实,要是有点注释就好了,只是我没有时间,过一段时间,不急着弄了,我整理出来 分享给大家

使用特权

评论回复
8
ifpga| | 2014-3-22 16:55 | 只看该作者

使用特权

评论回复
9
meng219902|  楼主 | 2014-4-15 08:51 | 只看该作者
注意一下
        是这样写的才对

QQ截图20140415084940.png (6.11 KB )

QQ截图20140415084940.png

新建文本文档 (3).zip

590 Bytes

使用特权

评论回复
10
meng219902|  楼主 | 2014-4-15 08:52 | 只看该作者
而不要这样写!因为他明确了 数据总线的位数(这是我瞎猜的)

QQ截图20140415085005.png (22.07 KB )

QQ截图20140415085005.png

使用特权

评论回复
11
qq919867589| | 2018-5-24 11:20 | 只看该作者
楼主,用quartus ii 编程遇到过Warning (15610): No output dependent on input pin "XD[7]"这个警告吗?应该怎么解决

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

908

帖子

14

粉丝