mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1833回复:9

在FPGA中如何用实现端口访问?

楼主#
更多 发布于:2002-12-16 10:21
本人现在需要设计一块ISA板卡,使用端口映射,数据口地址为3E0H,控制口地址为3E1H,状态口地址为3E2H。请问板卡上FPGA中的VHDL该怎么写?我是新手,恳请大家出手相助。谢谢。
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-12-16 10:50
板卡肯定有数据线adr

if adr=数据端口地址 then
....
elsif adr= 控制口地址 then
....
.....
mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
...
还望解答,谢谢。
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于: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;
后面类似吧
mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-17 09:50
我想问一下,
1,就是已经在entity中定义了isa_data,isa_addr,为什么还要在architecture中定义两个同样的signal?另外,地址线、读线、写线应该都定义成 in std_logic_vector吧。
2,我的FPGA还要和SRAM打交道,是不是跟与总线交换数据差不多呀?只是SRAM的读写要有FPGA来发起。
3,如果我想通过内存映射来传输数据的话,应该怎么写呢?
谢谢。
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-12-17 10:25
1.对于经常用到的管脚,我习惯于那样做,当然不是必需的,但是data可以看作是fpga内部的寄存器,data<=isa_data是读数据,数据总线上数据的保存时间是一定的,必须先读进来保存,相当于锁存。
2。是这样的。一你所说的判断,sram是fpga的从设备,fpga是isa的从设备
3。如你所说,每个端口都是有地址的,按照地址操作就行了
mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-17 10:50
谢谢你,现在我的概念已经比较清晰了。起始其实我是准备实现PCI总线的访问,用9052+FPGA,感觉不好描述,才用ISA总线来代替。
还有就是我写了个小程序,定义了两个inout端口,来实现双向数据交换,但在maxplusII下总是不能仿真呀。分别定义两个in,两个out就可以,怎么回事?
我的联系方式:s_mustang@163.com
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-12-17 14:31
你可以先用synplify综合,然后再编译就应该没问题了,我一般不用maxplus,用quartus
mustang
驱动小牛
驱动小牛
  • 注册日期2002-05-17
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-17 16:48
谢谢你,我只是个初学者,目前也没有synplify,东西也不复杂,我想MAXPLUSII应该也够用了。
可以告诉我你的联系方式吗?今后遇到问题的话,我想向你请教。
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-12-18 08:52
我知道的也不多,你可以给我发邮件,wsad1@sohu.com
游客

返回顶部