赛灵思
直播中

李秀云

7年用户 815经验值
私信 关注
[问答]

PS2双向接口出错该怎么办?

你好,我有PS2键盘接口控制器的问题我试图在Verilog中实现。
我怀疑我的两个双向端口,PS2时钟和PS2数据。
我的顶级模块是zad5,它包含一个合适的主机PS2模块。
从键盘传入的数据在hostPS2中处理。
HostPS2还处理从主机到键盘的传输(例如设置键盘的LED) - 通过拉线ps2_clk_o和ps2_data_o为低(因为它们在三态缓冲器ps2clk和ps2data中启用信号并来自hostPS2模块)。
说实话,我不知道,如果我的接线没问题。
我读了很多关于PS2接口的信息,发现数据和时钟线都是'开放收集器'类型,所以从主机到键盘的传输应该用三态缓冲器驱动。
我还想为我的顶级模块创建一个测试平台。
我在生成时钟和数据信号方面存在问题(如键盘那样),因为编译器会出现如下错误:
错误:HDLCompiler:731 - “zad5_test.v”第39行。不允许对非寄存器ps2_clk_io进行程序分配错误:HDLCompiler:731 - “zad5_test.v”第40行。不允许对非寄存器ps2_data_io进行过程分配
我猜我的双向端口有问题。
如果有人能提供帮助,我会很高兴,我正在开始使用HDL语言进行冒险。
这是我的代码:
模块zad5(clk_i,rst_i,ps2_clk_io,ps2_data_io);
输入clk_i,rst_i;
inout ps2_clk_io,ps2_data_io;
wire ps2_data_o;
wire ps2_clk_o;
hostPS2 h(.clk_i(clk_i),。KBDclk_i(ps2_clk_io),. KBDdata_i(ps2_data_io),. reset_i(rst_i),。KBDclk_en_o(ps2_clk_o),. KBDdata_en_o(ps2_data_o));
bufif0 ps2clk(ps2_clk_io,1'b0,ps2_clk_o);
bufif0 ps2data(ps2_data_io,1'b0,ps2_data_o);
endmodule
模块hostPS2(clk_i,KBDclk_i,KBDdata_i,reset_i,KBDclk_en_o,KBDdata_en_o);
输入clk_i,reset_i;
输入KBDclk_i,KBDdata_i;
//应该是inout,还是只是输入?
输出reg KBDclk_en_o = 1'b1;
输出reg KBDdata_en_o = 1'b1;
总是@(posedge clk5MHz_i或posedge reset_i)
开始
//这里有一些代码
结束
endmodule

回帖(3)

张晓宁

2019-10-23 06:59:48
你好,我有PS2键盘接口控制器的问题我试图在Verilog中实现。
我怀疑我的两个双向端口,PS2时钟和PS2数据。
在ISE Navigator shell中,单击灯泡图标。
这将打开“语言模板”窗口。
在这些模板中,您将找到许多构造的编码示例,包括双向IO。
以下是您将找到的示例:
inout; wire ,,,; assign =?
:1'bz; assign =;
从你的帖子:
错误:HDLCompiler:731 - “zad5_test.v”第39行。不允许对非寄存器ps2_clk_io进行程序分配错误:HDLCompiler:731 - “zad5_test.v”第40行。不允许对非寄存器ps2_data_io进行过程分配
我猜我的双向端口有问题。
如果有人能提供帮助,我会很高兴,我正在开始使用HDL语言进行冒险。
这是我的代码:
两个问题:
你没有标记第39行和第40行.Duh!
您不包含模块bufif0的代码
也许你的双向信号编码语法是唯一的问题。
查看应用模板表单是否有效。
- 鲍勃埃尔金德
签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。
阅读手册或用户指南。
你读过手册了吗?
你能找到手册吗?2。
搜索论坛(并搜索网页)以寻找类似的主题。
不要在多个论坛上发布相同的问题。
不要在别人的主题上发布新主题或问题,开始新的主题!5。
学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。
提供有用的详细信息(请与网页,数据表链接).7。
您的代码中的评论不需要支付额外费用。
我没有支付论坛帖子的费用。
如果我写一篇好文章,那么我一无所获。
举报

王茜

2019-10-23 07:06:54
好的,谢谢你的回复。
我将尝试使用模板。我的测试平台看起来像这样(有7seg显示的端口,但我在之前的代码中跳过它们):`timescale 1ns / 1psmodule zad5_test;
//输入reg clk_i;
reg rst_i;
//输出wire [3:0] led7_seg_an;
wire [7:0] led7_seg_o;
//比尔斯线ps2_clk_io;
wire ps2_data_io;
//实例化被测单位(UUT)zad5 uut(.clk_i(clk_i),. first_i(rst_i),. led7_seg_an(led7_seg_an),. led7_seg_o(led7_seg_o),. ps2_clk_io(ps2_clk_io),. ps2_data_io(ps2_data_io));
总是开始#10 clk_i = ~clk_i;
结束初始开始clk_i = 1'b0;
ps2_clk_io = 1;
ps2_data_io = 1;
rst_i = 1;
#1000;
rst_i = 0;
#70000 ps2_data_io = 0;
//起始位#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 0;
// bit 0#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 0;
// bit 1#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 0;
// bit 2#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 1;
// bit 3#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 1;
// bit 4#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 1;
// bit 5#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 0;
// bit 6#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 0;
// bit 7#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 0;
//奇偶校验位#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
#16500 ps2_data_io = 1;
//停止位#16500 ps2_clk_io = 0;
#33000 ps2_clk_io = 1;
结束endmodule据我记得当然,在Verilog中,bufif0是一个原语,如NAND或NOR门,代表三态缓冲器,低电平有效使能。
我错了吗?
我没有这个模块的任何代码。
举报

张晓宁

2019-10-23 07:18:32
据我记得,当然,在Verilog中,bufif0是一个原语,如NAND或NOR门,代表三态缓冲器,低电平有效使能。
我错了吗?
你是对的。
这是我第一次注意到这一点,我感谢你!
- 鲍勃埃尔金德
签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。
阅读手册或用户指南。
你读过手册了吗?
你能找到手册吗?2。
搜索论坛(并搜索网页)以寻找类似的主题。
不要在多个论坛上发布相同的问题。
不要在别人的主题上发布新主题或问题,开始新的主题!5。
学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。
提供有用的详细信息(请与网页,数据表链接).7。
您的代码中的评论不需要支付额外费用。
我没有支付论坛帖子的费用。
如果我写一篇好文章,那么我一无所获。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分