阅读:1833回复:9
在FPGA中如何用实现端口访问?
本人现在需要设计一块ISA板卡,使用端口映射,数据口地址为3E0H,控制口地址为3E1H,状态口地址为3E2H。请问板卡上FPGA中的VHDL该怎么写?我是新手,恳请大家出手相助。谢谢。
|
|
沙发#
发布于:2002-12-16 10:50
板卡肯定有数据线adr
if adr=数据端口地址 then .... elsif adr= 控制口地址 then .... ..... |
|
板凳#
发布于:2002-12-16 14:07
老兄,按你说的:
if adr=数据端口地址 then .... then后面该怎么写呢? 是不是应该先如下定义: isa_data : inout std_logic_vector(0 to 7); isa_addr : out std_logic_vector(0 to 7); io_write : out std_logic_vector; io_read : out std_logic_vector; ... if isa_addr=3e0h then 判断是读还是写; if 写 then ... if 读 then ... elsif isa_adrr=3e1h then ... elsif isa_addr=3e2h then ... 还望解答,谢谢。 |
|
地板#
发布于:2002-12-16 15:37
port
isa_data : inout std_logic_vector(0 to 7); isa_addr : out std_logic_vector(0 to 7); io_write : out std_logic_vector; io_read : out std_logic_vector; architecture func of entitynama is signal isa_addr1 :std_logic_vextor(0 to 7); signal data: std_logic_vector(0 to 7); isa_addr1<=isa_addr; begin if (isa_addr1=X\"03e\")then if io_write =1 then data<=isa_data; 读端口数据 elsif io_read=\'1\' then isa_data<=data; 写端口 else ...... end if; 后面类似吧 |
|
地下室#
发布于:2002-12-17 09:50
我想问一下,
1,就是已经在entity中定义了isa_data,isa_addr,为什么还要在architecture中定义两个同样的signal?另外,地址线、读线、写线应该都定义成 in std_logic_vector吧。 2,我的FPGA还要和SRAM打交道,是不是跟与总线交换数据差不多呀?只是SRAM的读写要有FPGA来发起。 3,如果我想通过内存映射来传输数据的话,应该怎么写呢? 谢谢。 |
|
5楼#
发布于:2002-12-17 10:25
1.对于经常用到的管脚,我习惯于那样做,当然不是必需的,但是data可以看作是fpga内部的寄存器,data<=isa_data是读数据,数据总线上数据的保存时间是一定的,必须先读进来保存,相当于锁存。
2。是这样的。一你所说的判断,sram是fpga的从设备,fpga是isa的从设备 3。如你所说,每个端口都是有地址的,按照地址操作就行了 |
|
6楼#
发布于:2002-12-17 10:50
谢谢你,现在我的概念已经比较清晰了。起始其实我是准备实现PCI总线的访问,用9052+FPGA,感觉不好描述,才用ISA总线来代替。
还有就是我写了个小程序,定义了两个inout端口,来实现双向数据交换,但在maxplusII下总是不能仿真呀。分别定义两个in,两个out就可以,怎么回事? 我的联系方式:s_mustang@163.com |
|
7楼#
发布于:2002-12-17 14:31
你可以先用synplify综合,然后再编译就应该没问题了,我一般不用maxplus,用quartus
|
|
8楼#
发布于:2002-12-17 16:48
谢谢你,我只是个初学者,目前也没有synplify,东西也不复杂,我想MAXPLUSII应该也够用了。
可以告诉我你的联系方式吗?今后遇到问题的话,我想向你请教。 |
|
9楼#
发布于:2002-12-18 08:52
我知道的也不多,你可以给我发邮件,wsad1@sohu.com
|
|