minthe 发表于 2012-7-6 16:33:49

关于cpld和cpu的通讯问题

绝对的初学者。
我想实现这样一个功能:cpu给cpld发四个地址,cpld接收到地址后根据不同地址给数据总线赋不同的值,把值送给cpu。
我完全是按书上语法来写的,查错编译综合也都通过了,但下到cpld里就是传不了数,用仿真器在cpu里读不到数。
对应的引脚都连好了,UCF的定义也没问题。哪位好心的高手能指导我一下。。。
如果有好的学习方法也欢迎指导。。。我以前接触的硬件主要是画原理图和PCB图或者做手工焊板子。。。
现在学fpga,除了看书,就是照着例子写代码,下到芯片里实验。但写好的代码实现不了功能,我很迷茫。。。
十分感谢路过的各位!

`define SctrByte0 8'h00//定义地址
`define SctrByte1 8'h01
`define SctrByte2 8'h02
`define SctrByte3 8'h03

module transmit(DataBus,AddressBus,WE,OE,CS1,inclk);
input AddressBus;//地址总线                  
input WE;                   //cpu写使能
input OE;                   //cpu读使能
input CS1;      
input inclk;               //cpld时钟
inout DataBus;    //数据总线

reg pre_rd;
reg DataReg = 8'b00000000;
reg AddressReg;

assign DataBus = DataReg;

always @(posedge inclk)
begin
if (CS1 == 0 && WE == 0)
begin
AddressReg <= AddressBus;   //cpu向cpld写地址
end
end

always @(posedge inclk)
begin
if (OE == 0)
begin
pre_rd <= 1;
end
else
begin
pre_rd <= 0;
end
end

always @(posedge inclk)
begin
if (pre_rd)
      begin
      case(AddressReg)                     //根据不同地址赋值
        `SctrByte0:
        begin
        DataReg <= 8'b00000011;
        end
                                       
        `SctrByte1:
        begin
        DataReg <= 8'b00001100;
        end
                                       
        `SctrByte2:
        begin
        DataReg <= 8'b00110000;
        end
                                       
        `SctrByte3:
        begin
        DataReg <= 8'b11000000;       
        end
        endcase
        end
   else
begin
DataReg <= 8'bzzzzzzzz;
end
end

endmodule

wye11083 发表于 2012-7-6 20:36:56

谁告诉你Reg可以赋值'bz?你自己发明的吧。或者就是你的书是你写的。还有可能是你看的是讲的仿真的。给一个端口赋值的方法是assign Port = (PortEN)? RegData : 'bz;

幸福的鱼 发表于 2012-7-6 22:22:38

你的CPU和CPLD的通信方式是什么?不理解

luluxiu 发表于 2012-7-7 19:17:55

用的什么板子,管脚约束可别错
页: [1]
查看完整版本: 关于cpld和cpu的通讯问题