赛灵思
直播中

刘宇

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

如何在Verilog中为Virtex-5使用IBUFDS,OBUFDS(差分信号缓冲器)

你好,
我正在使用Virtex 5和INPUTS和OUTPUTS的一些高速差分信号。
我知道我必须使用缓冲区,但我不太确定如何在Verilog中编写代码。
因此,我有两个问题:
1.我在哪里实例化IBUFDS和OBUFDS?
2.我可以将它们放在我的顶层模块中,如下所示吗?
3.IBUFDS和OBUFDS之后的符号“#”是什么?
谢谢你的帮助。
module_signals_test_top模块(
输入CLOCK_IN_P,
输入CLOCK_IN_N,
输入[15:0] DATA_IN_P,
输入[15:0] DATA_IN_P,
//输出CLOCK_OUT_P,
//输出CLOCK_OUT_N,
输出[15:0] DATA_IN_BUFF

reg CLOCK_IN;
reg CLOCK_OUT;
reg [15:0] DATA_IN;
reg [15:0] DATA_IN_BUFF;
IBUFDS#(
.CAPACITANCE( “DONT_CARE”),
.DIFF_TERM( “FALSE”),
.IBUF_DELAY_VALUE( “0”),
.IFD_DELAY_VALUE( “AUTO”),
.IOSTANDARD( “DEFAULT”)
)IBUFDS_inst(
.O(CLOCK_IN),
.I(CLOCK_IN_P),
.IB(CLOCK_IN_N)
);
OBUFDS#(
.IOSTANDARD( “DEFAULT”)
)OBUFDS_inst(
.O(CLOCK_OUT_P),
.OB(CLOCK_OUT_N),
.I(CLOCK_OUT)
);
IBUFDS#(
.CAPACITANCE( “DONT_CARE”),
.DIFF_TERM( “FALSE”),
.IBUF_DELAY_VALUE( “0”),
.IFD_DELAY_VALUE( “AUTO”),
.IOSTANDARD( “DEFAULT”)
)IBUFDS_inst(
.O(DATA_IN),
.I(DATA_IN_P),
.IB(DATA_IN_N)
);
//发送CLOCK_OUT
//在每个CLOCK_IN处将DATA_IN锁存到另一个BUFFER
总是@(posedge CLOCK_IN)
开始
DATA_IN_BUFF DATA_IN;
结束
endmodule
消息由kevintruong在03-07-2010 12:50 AM编辑

回帖(6)

周臻庸

2020-6-19 10:06:31
欢迎来到Verilog的全新世界(如果您在大约十年前学习过Verilog,那么欢迎来到原始版本)。
从Verilog2001开始,语法“module_type#( - param_list-)module_instance_name(-port_list)”有助于缩短通常很长的defparam修饰符列表到模块。
参数用于“调整”模块中设计的方面。
#是一个标识符,告诉合成器和阅读器以下可选列表用于参数。
我通常也会在顶级实例化我的IOBUF,但我确信如果需要,你可以将它们埋在你的层次结构中更深层次,你只需要通过层次结构携带差分对。
将差异保持在顶部意味着只需要一个信号而不是一对信号。
代码中可能缺少的是引入所有16位数据的实例数组。
只需将“IBUFDS_inst”更改为“IBUFDS_inst [15:0]”,您就可以获得所有16位。
在原帖中查看解决方案
举报

周臻庸

2020-6-19 10:18:31
欢迎来到Verilog的全新世界(如果您在大约十年前学习过Verilog,那么欢迎来到原始版本)。
从Verilog2001开始,语法“module_type#( - param_list-)module_instance_name(-port_list)”有助于缩短通常很长的defparam修饰符列表到模块。
参数用于“调整”模块中设计的方面。
#是一个标识符,告诉合成器和阅读器以下可选列表用于参数。
我通常也会在顶级实例化我的IOBUF,但我确信如果需要,你可以将它们埋在你的层次结构中更深层次,你只需要通过层次结构携带差分对。
将差异保持在顶部意味着只需要一个信号而不是一对信号。
代码中可能缺少的是引入所有16位数据的实例数组。
只需将“IBUFDS_inst”更改为“IBUFDS_inst [15:0]”,您就可以获得所有16位。
举报

刘刚

2020-6-19 10:24:34
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

刘刚

2020-6-19 10:32:37
嗨乔恩,
对此错误有任何想法:“连接到实例数组'IBUFDS_data_inst'的端口'O'必须是净左值”
moduledifferential_signals_test_top(
inputCLOCK_IN_P,
inputCLOCK_IN_N,
输入[15:0] DATA_IN_P,
输入[15:0] DATA_IN_P,
//输出CLOCK_OUT_P,
//输出CLOCK_OUT_N,
输出[15:0] DATA_IN_BUFF

regCLOCK_IN;
regCLOCK_OUT;
REG [15:0] DATA_IN;
REG [15:0] DATA_IN_BUFF;
IBUFDS#(
.CAPACITANCE( “DONT_CARE”),
.DIFF_TERM( “FALSE”),
.IBUF_DELAY_VALUE( “0”),
.IFD_DELAY_VALUE( “AUTO”),
.IOSTANDARD( “DEFAULT”)
)IBUFDS_inst(
.O(CLOCK_IN),
.I(CLOCK_IN_P),
.IB(CLOCK_IN_N)
);
OBUFDS#(
.IOSTANDARD( “DEFAULT”)
)OBUFDS_inst(
.O(CLOCK_OUT_P),
.OB(CLOCK_OUT_N),
.I(CLOCK_OUT)
);
IBUFDS#(
.CAPACITANCE( “DONT_CARE”),
.DIFF_TERM( “FALSE”),
.IBUF_DELAY_VALUE( “0”),
.IFD_DELAY_VALUE( “AUTO”),
.IOSTANDARD( “DEFAULT”)
)IBUFDS_data_inst [15:0](
.O(DATA_IN),
.I(DATA_IN_P),
.IB(DATA_IN_N)
);
//发送CLOCK_OUT
//在每个CLOCK_IN处将DATA_IN锁存到另一个BUFFER
总是@(posedgeCLOCK_IN)
开始 
DATA_IN_BUFFDATA_IN;
结束
endmodule
举报

更多回帖

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