8051扩展SRAM后,程序烤进去后没反应,不知道我们的工程哪儿错了,请版主指教!<br /><br />我做了两个工程,好像都有问题,顶层文件如下,请版主帮我看看错在什么地方,万分感谢!<br /><br />顶层文件1:<br /><br />module USER_CORE8051 (p_reset, clk48m,p0o,p0i,p1o,p1i,p2o,rxd,txd,INT0,TCK,TDI,TDO,TMS,TRSTB,memdata,cs,wr,rd,ub,lb,adr);<br />parameter FMEMFILE = "flashmem.mem";<br /><br /> input p_reset;<br /> input clk48m;<br /> input TCK,TDI,TMS,TRSTB;<br /> output TDO;<br /> output[7:0] p0o,p1o,p2o;<br /> input[7:0] p0i,p1i; <br /> input INT0;<br /> input rxd;<br /> output txd;<br /> inout [15:0] memdata;<br /> output cs,wr,rd,ub,lb;<br /> output [18:0] adr; <br /> wire mcuclk,<br /> nmcuclk,<br /> clk18m;<br /> wire dbgmempswr,mempsrd,memwr,memrd;<br /> wire [7:0] memdatao;<br /> wire [7:0] memdatai;<br /> wire [15:0] memaddr; <br /> wire [15:0] memdatao16;<br /> wire [15:0] memdatai16;<br /> wire[7:0] ramdatai; <br /> wire[7:0] ramdatao; <br /> wire[7:0] ramaddr; <br /> wire ramwe; <br /> wire ramoe; <br /> wire n_reset;<br /> wire[31:0] zeroes; <br /> wire[31:0] ones; <br /> wire GND_sig; <br /> wire VCC_sig;<br /><br /> // Flash Memory signals<br />wire [17:0] fm_addr;<br />wire [31:0] fm_din;<br />wire [31:0] fm_dout;<br />wire [1:0] fm_byte_width;<br />wire fm_busy;<br />wire RESETN;<br />wire mempsacki_pre;<br />reg mempsacki;<br /><br /><br />assign fm_addr = {2'h0,memaddr[15:0]};<br />assign fm_byte_width = 2'b00;<br />assign fm_din = 32'b0;<br /><br /> assign GND_sig = 1'b0 ;<br /> assign VCC_sig = 1'b1 ;<br /> assign zeroes = {32{1'b0}} ;<br /> assign ones = {32{1'b1}} ;<br /> assign n_reset = ~p_reset; <br /> assign memdatao16={memdatao,memdatao};<br /> assign memdatai=mempsrd?fm_dout[7:0]:memdatai16[15:8];<br /> assign memdatai16=memdata;<br /> assign memdata=(dbgmempswr||memwr)?memdatao16:16'bzzzzzzzzzzzzzzzz;<br /> assign adr={3'b000,memaddr};<br /> assign wr=~(dbgmempswr||memwr);<br /> assign rd=~(mempsrd||memrd);<br /> assign cs=wr&rd;<br /> assign ub=~(memwr||memrd);<br /> assign lb=~(dbgmempswr||mempsrd);<br /><br /> assign mcuclk =clk18m;<br /> assign nmcuclk = ~mcuclk ;<br /><br /> assign GND0 = 1'b0;<br /> assign VCC1 = 1'b1;<br /><br /><br /> pll33m pll33m(<br /> .POWERDOWN(VCC_sig),<br /> .CLKA(clk48m),<br /> .GLA(clk18m)<br /> );<br /> CORE8051 CORE8051_inst (.nreset(n_reset), .clk(mcuclk), .clkcpu(mcuclk),<br /> .clkper(mcuclk), .port0i(p0i),<br /> .port1i(p1i), .port2i(zeroes[7:0]), .port3i(zeroes[7:0]),<br /> .int0(INT0), .int1(VCC_sig), .int0a(GND_sig), .int1a(GND_sig),<br /> .int2(GND_sig), .int3(GND_sig), .int4(GND_sig), .int5(GND_sig),<br /> .int6(GND_sig), .int7(GND_sig), .rxd0i(rxd), .t0(GND_sig),.t1(GND_sig),<br /> .nrsto(RESETN), .nrsto_nc(), .clkcpu_en(), .clkper_en(), .movx(), .port0o(p0o),<br /> .port1o(p1o), .port2o(p2o), .port3o(), .rxd0o(), .txd0(txd), .mempsacki(mempsacki),<br /> .memacki(VCC_sig), .memdatai(memdatai), .mempsacko(), .memdatao(memdatao),<br /> .memaddr(memaddr), .mempsrd(mempsrd), .memwr(memwr), .memrd(memrd), .ramdatai(ramdatai),<br /> .ramdatao(ramdatao), .ramaddr(ramaddr), .ramwe(ramwe), .ramoe(ramoe),<br /> .sfrdatai(zeroes[7:0]), .sfrdatao(), .sfraddr(), .sfrwe(), .sfroe(),<br /> .TCK(TCK), .TMS(TMS), .TDI(TDI), .TDO(TDO), .TRSTB(TRSTB),<br /> .BreakIn(GND_sig), .BreakOut(), .membank(zeroes[3:0]), .dbgmempswr(dbgmempswr),<br /> .TrigOut(), .AuxOut(), .TraceA(), .TraceDI(), .TraceDO(zeroes[19:0]),<br /> .TraceWr());<br /><br /> RAM256X8 internal_RAM(<br /> .WD(ramdatao),<br /> .RD(ramdatai),<br /> .WEN(ramwe),<br /> .REN(ramoe),<br /> .WADDR(ramaddr),<br /> .RADDR(ramaddr),<br /> .WCLK(mcuclk),<br /> .RCLK(nmcuclk)<br /> );<br /><br />NVM #(.MEMORYFILE(FMEMFILE)) u_FLASH_MEM (<br /> .ADDR(fm_addr),<br /> .WD(fm_din),<br /> .DATAWIDTH(fm_byte_width),<br /> .REN(VCC1),<br /> .READNEXT(GND0),<br /> .PAGESTATUS(GND0),<br /> .WEN(GND0),<br /> .ERASEPAGE(GND0),<br /> .PROGRAM(GND0),<br /> .SPAREPAGE(GND0),<br /> .AUXBLOCK(GND0),<br /> .UNPROTECTPAGE(GND0),<br /> .OVERWRITEPAGE(GND0),<br /> .DISCARDPAGE(GND0),<br /> .OVERWRITEPROTECT(GND0),<br /> .PAGELOSSPROTECT(GND0),<br /> .PIPE(VCC1),<br /> .LOCKREQUEST(VCC1),<br /> .CLK(fasterclk),<br /> .RESET(RESETN),<br /> .RD(fm_dout),<br /> .BUSY(fm_busy),<br /> .STATUS()<br />);<br /><br />always @(negedge mcuclk or negedge RESETN)<br />begin<br /> if (!RESETN)<br /> mempsacki <= 1'b0;<br /> else<br /> mempsacki <= mempsacki_pre;<br />end<br />assign mempsacki_pre = ~fm_busy;<br /><br />endmodule<br /><br />顶层文件2:<br /><br />//8051模块<br />module USER_CORE8051 (reset, clk48m,p0o,p0i,p1o,p1i,p2o,p2i,p3o,p3i,rxd,txd,INT0,INT1,TCK,TDI,TDO,TMS,TRSTB,memdata,cs,wr,rd,ub,lb,adr);<br /> input reset;<br /> input clk48m;<br /> output[7:0] p0o,p1o,p2o,p3o; //51单片机的P1,P2,P3 输出口<br /> input[7:0] p0i,p1i,p2i,p3i; //51单片机的P1,P2输入口 <br /> input INT0,INT1; //单片机中断信号 <br /> input rxd; //51单片机串口接收数据端口<br /> output txd; //51单片机串口发送数据端口<br /> <br /> input TCK,TDI,TMS,TRSTB;<br /> output TDO; <br /><br /> inout [15:0] memdata;<br /> output cs,wr,rd,ub,lb;<br /> output [18:0] adr;<br /> <br /> wire mcuclk,<br /> nmcuclk;<br /><br /> wire dbgmempswr,mempsrd,memwr,memrd;<br /><br /> wire [7:0] memdatao;<br /> wire [7:0] memdatai;<br /> wire [15:0] memaddr; <br /> wire [15:0] memdatao16;<br /> wire [15:0] memdatai16;<br /> wire[7:0] ramdatai; <br /> wire[7:0] ramdatao; <br /> wire[7:0] ramaddr;<br /><br /> wire mempsacki; <br /> wire ramwe; <br /> wire ramoe; <br /> wire n_reset;<br /><br /> wire[31:0] zeroes; <br /> wire[31:0] ones; <br /> wire GND_sig; <br /> wire VCC_sig;<br /><br /><br /> // Flash Memory signals<br />wire [17:0] fm_addr;<br />wire [31:0] fm_din;<br />wire [31:0] fm_dout;<br />wire [1:0] fm_byte_width;<br />wire fm_busy;<br />wire mempsacki_pre;<br />wire RESETN;<br /><br /><br />assign fm_addr = {2'h0,memaddr[15:0]};<br />assign fm_din = 32'b0;<br /><br /><br /> assign GND_sig = 1'b0 ;<br /> assign VCC_sig = 1'b1 ;<br /> assign zeroes = {32{1'b0}} ;<br /> assign ones = {32{1'b1}} ; <br /> assign n_reset = ~reset; //低电平复位<br /> <br /> assign memdatao16={memdatao,memdatao};<br /> assign memdatai=mempsrd?fm_dout[7:0]:memdatai16[15:8];<br /> assign memdatai16=memdata;<br /> assign memdata=(dbgmempswr||memwr)?memdatao16:16'bzzzzzzzzzzzzzzzz;<br /> assign adr={3'b000,memaddr};<br /> assign wr=~(dbgmempswr||memwr);<br /> assign rd=~(mempsrd||memrd);<br /> assign cs=wr&rd;<br /> assign ub=~(memwr||memrd);<br /> assign lb=~(dbgmempswr||mempsrd);<br /><br /> assign nmcuclk = ~mcuclk ;<br /><br /><br /><br />/*Flsahmemory作为8051的内部ROM*/<br />flashmem U1(<br /> .USER_CLK(!mcuclk),<br /> .USER_RESET(RESETN),<br /> .USER_ADD(fm_addr),<br /> .USER_READ(mempsrd), <br /> .USER_WIDTH(2'b00), <br /> .USER_DOUT(fm_dout), //数据位宽为8位<br /> .USER_READ_NEXT(1'b0), //正常读写<br /> .USER_NVM_BUSY(fm_busy)<br /> );<br /><br /><br />/*Flsahmemory读控制模块*/<br />Core8051_ROM_Ctr U2( <br /> .clk_ctr(mcuclk),<br /> .rst(!RESETN),<br /> .BUSY(fm_busy),<br /> .mempsacki(mempsacki)<br /> );<br /><br /> //例化PLL<br /> pll33m pll33m(<br /> .POWERDOWN(VCC_sig),<br /> .CLKA(clk48m),<br /> .GLA(mcuclk)<br /> );<br />//例化8051模块<br /> CORE8051 CORE8051_inst (.nreset(n_reset), .clk(mcuclk), .clkcpu(mcuclk),<br /> .clkper(mcuclk), .port0i(p0i),<br /> .port1i(p1i), .port2i(p2i), .port3i(p3i),<br /> .int0(INT0), .int1(INT1), .int0a(GND_sig), .int1a(GND_sig),<br /> .int2(GND_sig), .int3(GND_sig), .int4(GND_sig), .int5(GND_sig),<br /> .int6(GND_sig), .int7(GND_sig), .rxd0i(rxd), .t0(GND_sig),.t1(GND_sig),<br /> .nrsto(RESETN), .nrsto_nc(), .clkcpu_en(), .clkper_en(), .movx(), .port0o(p0o),<br /> .port1o(p1o), .port2o(p2o), .port3o(p3o), .rxd0o(), .txd0(txd), .mempsacki(mempsacki),<br /> .memacki(VCC_sig), .memdatai(memdatai), .mempsacko(), .memdatao(memdatao),<br /> .memaddr(memaddr), .mempsrd(mempsrd), .memwr(memwr), .memrd(memrd), .ramdatai(ramdatai),<br /> .ramdatao(ramdatao), .ramaddr(ramaddr), .ramwe(ramwe), .ramoe(ramoe),<br /> .sfrdatai(zeroes[7:0]), .sfrdatao(), .sfraddr(), .sfrwe(), .sfroe(),<br /> .TCK(TCK), .TMS(TMS), .TDI(TDI), .TDO(TDO), .TRSTB(TRSTB),<br /> .BreakIn(GND_sig), .BreakOut(), .membank(zeroes[3:0]), .dbgmempswr(),<br /> .TrigOut(), .AuxOut(), .TraceA(), .TraceDI(), .TraceDO(zeroes[19:0]),<br /> .TraceWr());<br /><br />//例化单片机RAM模块<br /> RAM256X8 internal_RAM(<br /> .WD(ramdatao),<br /> .RD(ramdatai),<br /> .WEN(ramwe),<br /> .REN(ramoe),<br /> .WADDR(ramaddr),<br /> .RADDR(ramaddr),<br /> .WCLK(mcuclk),<br /> .RCLK(nmcuclk)<br /> );<br /><br />endmodule<br /><br />谢谢版主!<br /><br /><br /> |
|