|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
求助:inout Databus有问题,怎么解决,先谢谢了 |
作者:larmstrong 栏目:EDA技术 |
/* ISPLSI1016 ispExpert V7.01*/ /* 这是一个单片机系统,这个芯片主要实现三个功能: 1 地址分配 2 检测纸张传感器 3 单片机向端口(8000H)写数据,芯片负责把数据串行发送出去(要产生时钟和数据) */ `timescale 1ns/1ns MODULE DECODER(CP, DECODE, STB, A, WR, RD, PAPER_OUT, TI, Databus, TO, CS_1230, CS_8255K, CS_8255P, CS_LCD, CS_12887, RST, RST_LCD, PRT_D, PRT_CLK, PRT1, PRT2, PRT3, PRT4); parameter N=7, delay=1; input DECODE; input CP, RD, WR, PAPER_OUT; input TI,STB; input [15:11]A; inout [N:0]Databus; OUTPUT CS_1230, CS_8255K, CS_8255P, CS_LCD, CS_12887,RST, RST_LCD; OUTPUT TO, PRT1,PRT2,PRT3,PRT4; OUTPUT PRT_D, PRT_CLK; wire [N:0]Databus; reg [N:0]PrintData; integer Count; reg CS_1230, CS_8255K, CS_8255P, CS_LCD, CS_12887; reg PRT_D, PRT_CLK; reg PRT1,PRT2,PRT3,PRT4; reg RST,RST_LCD; /*初始化*/ initial begin RST = 1'b1; RST_LCD = 1'b1; PRT_D = 1'b0; PRT_CLK = 1'b0; PRT1 = 1'b0; PRT2 = 1'b0; PRT3 = 1'b0; PRT4 = 1'b0; end /*向8000H写数据*/ always @(negedge WR) begin if(A == 5'b10000) begin PrintData = 8'b11001100;//AD; Count = 1; end end /*数据传送 接收到上面的数据就把8比特数据向串行线上传送*/ always @(posedge CP) //CP是51MCU的ALE begin if(Count != 0) begin {PRT_D,PrintData}={PrintData,1'b0}; Count = Count + 1; PRT_CLK = # 50 1'b1; //产生时钟信号 if(Count==9) Count=0; PRT_CLK = # 50 1'b0; end end /*纸张检测 0E000H*/ always @(negedge RD) if(A==5'b11100) begin Databus[0] = PAPER_OUT; //PAPER_OUT是纸的检测传感器 end /*内部打印机STB*/ assign TO = STB; //用外部单稳态触发器控制时间,这里触发 always @(negedge TI) //计时完成,关打印机加热器 begin PRT1 = 1'b0; PRT2 = 1'b0; PRT3 = 1'b0; PRT4 = 1'b0; end /*译码*/ always @(A) //A只有5个管脚和这个芯片相连 begin casex (A) 5'b0xxxx: //RAM begin //*************下面一段是产生片选信号********** CS_1230 = 1'b0; CS_8255P = 1'b1; CS_8255K = 1'b1; CS_LCD = 1'b1; CS_12887 = 1'b1; end 5'b10111: //B800 8255P begin CS_1230 = 1'b1; CS_8255P = 1'b0; CS_8255K = 1'b1; CS_LCD = 1'b1; CS_12887 = 1'b1; end &nb |
2楼: | >>参与讨论 |
作者: liuorins 于 2006/6/27 22:20:00 发布:
随便说一句 兄弟你的问题好像是双向io口的问题,可你却搞了这么长的程序来,别人没有那么多时间来看的,问问题要集中。一句小的忠告, :) 大概看了一下,我有几点疑问?你用的开发系统是什么?基于什么芯片?verilog HDL语言是一种类似c的语言,很多它的语句是不能综合的,如初始化等,你要将语言与实际的数字电路,如三态门,d触发器,多路选择开关等对应起来。 双向io口的控制可以用两个简单的三态门来实现,注意不能用reg,是wire。 |
3楼: | >>参与讨论 |
作者: larmstrong 于 2006/8/24 11:47:00 发布:
这是一个实现方式 三态 inout [N:0]Databus; reg LINK; assign Databus = (LINK)?{password[6:0],PAPER_OUT}:8'bz; //三态门 always @(A or RD) if((A==5'b11100) && (RD == 1'b0)) begin LINK = 1'b1; //PAPER_OUT是纸的检测传感器 end else begin LINK = 1'b0; end |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |