在MA703的HDMI OUT例程中,有个疑
本帖最后由 玛瑙_重获新生i 于 2020-2-7 14:32 编辑1.例程中,此句是有问题的吧?
用按位与&,turn_mode是1bit的,其是不是会一直与最低位key_counter相与&,那么key_counter为0或偶数时,该if就永不能为真了,对吗?
2.key_counter是17bit的,如果用14'b0赋值,那么其高位,是保持原值不变,还是也会被赋值为0?
3.但好像改不改14'b0,以及&,程序编译执行,实际验证都没问题,这又是为何呢?
4.这个按键销抖又是怎么做到的呢?如果按键将被抬起时(turn_mode 为1),那么17'h11704(17'd71428,如按20ns周期,去抖时间也只有1.4ms多,是不是会不够?按分辨率720p,周期是13.5ns,更小)后,key_counter 就计满数了,去抖时间约1.4ms左右,会不会不够呢?会出现按键还没松开,结果LED却改变了吗?
谢谢
1对于&是按位与
对于&& 是逻辑与
这个地方 & 和&& 作用一样,因为是1位,也只有都是1位的按位与和逻辑与结果一样 msxbo 发表于 2020-2-7 11:26
1对于&是按位与
对于&& 是逻辑与
这个地方 & 和&& 作用一样,因为是1位,也只有都是1位的按位与和逻 ...
1.我理解是结果(turn_mode==1'b1的结果,真或假,只有1位)与结果相与,所以是1bit的,对吧?
2.key_counter是17bit的,如果用14'b0赋值,那么其高位,是保持原值不变,还是也会被赋值为0?这个没在百度上查到,请指导,谢谢。
3.按键抬起时的去抖,有点不理解,如果按键抬起时,有1ms左右的抖动,LED是不是也会改变状态?从代码上看,好像是这样的,对吗?
(key_counter计数到17'h11704(17'd71428,如按20ns周期,去抖时间也只有1.4ms多,按分辨率720p,周期是13.5ns,去抖时间更小)后,LED就加1,改变状态。 1、对
2、你学习的比较认真,这里确实个问题,最好仿真下,2019版本的资料这个例子这个地方不严谨,2020版本教程已经解决这个问题。
3、是,可以增加按键的延迟去抖动时间。
总结,这个程序这个地方不严谨,不是我写的。2020版本基础篇都是是我写的,已经解决全部不严谨的地方。所以写程序不是满足功能就可以了,还要严谨规范,对于之前版本的不规范的地方,如果我负责的地方都已经很好解决。
敬请期待2020版本资料,购买板子的可以免费升级到2020版本。 msxbo 发表于 2020-2-7 12:08
1、对
2、你学习的比较认真,这里确实个问题,最好仿真下,2019版本的资料这个例子这个地方不严谨,2020版 ...
写了个仿真,想检测一下,但总是报错,网上查也没有结果。请指导。谢谢。
module hdmi_1080P_TB();
reg clk_50M;
reg KEY;
wire HDMI_CLK_P;
wire HDMI_CLK_N;
wire HDMI_D2_P;
wire HDMI_D2_N;
wire HDMI_D1_P;
wire HDMI_D1_N;
wire HDMI_D0_P;
wire HDMI_D0_N;
wire LED;
HDMI_display_Demonuut1 (
.clk_50M(clk_50M),
.KEY(KEY),
.HDMI_CLK_P(HDMI_CLK_P),
.HDMI_CLK_N(HDMI_CLK_N),
.HDMI_D2_P(HDMI_D2_P),
.HDMI_D2_N(HDMI_D2_N),
.HDMI_D1_P(HDMI_D1_P),
.HDMI_D1_N(HDMI_D1_N),
.HDMI_D0_P(HDMI_D0_P),
.HDMI_D0_N(HDMI_D0_N),
.LED(LED)
);
initial begin
clk_50M = 0;
forever
#10clk_50M = ~clk_50M;
end
initial begin
KEY = 1; #1000;
KEY = 0; #1_000_000;
KEY = 1; #1000;
forever begin
KEY = 0; #1000;
KEY = 1; #2000;
KEY = 0; #5000;
KEY = 1; #3_000_000;
KEY = 0; #2_000_000;
KEY = 1; #50_000_000;
KEY = 0; #1_000_000;
KEY = 1; #1000;
KEY = 0; #1000;
KEY = 1; #2000;
KEY = 0; #5000;
KEY = 1; #3_000_000;
KEY = 0; #2_000_000;
KEY = 1; #50_000_000;
KEY = 0;
end
end
endmodule
报错如下:
'compile' step failed with error(s). Please check the Tcl console output or 'F:/Xilinx_project/vivado_lianxi/01_CH08/01_02/hdmi_display_demon_1080P _mcs/hdmi_display_demon.sim/sim_1/behav/xsim/xvhdl.log' file for more information.
Detected error while running simulation. Please correct the issue and retry this operation.
ERROR: 'launch_simulation' failed due to earlier errors. 另:我还想问问,hdmi_data_gen程序中,出现了很多次:
if (0)
该if (0) ,也不是用在宏语句中,会执行吗?该if语句有啥用处?
比如:
reg x_cnt;
always @(posedge pix_clk) //水平计数
begin
if(1'b0)
x_cnt <= 1;
else if(x_cnt==H_Total)
x_cnt <= 1; 1、HDMI信号不支持仿真,可以把HDMI调用接口注释,引出RGB接口仿真
2、if(1'b0) 就是完成上电复位,仿真跑起来后可以验证下
msxbo 发表于 2020-2-7 21:02
1、HDMI信号不支持仿真,可以把HDMI调用接口注释,引出RGB接口仿真
2、if(1'b0) 就是完成上电复位,仿真跑 ...
您好。
1.我将顶层文件中,HDMI_FPGA_ML_0 模块注释了,也将hdmi_data_gen中的RGB改为了顶层文件中的输出,但RUN Behavioral Simulation 仍报上面的那两个错误。请指导该如何HDMI接口注释,引出RGB。
2.我想生成MCS和BIN,发现只能用SPI x1生成。在约束文件中,加了4.7中优化管脚约束的几行后,才ok了。这正确吧,百度查了,但对于约束中增加的几行的具体含义还不是很清楚。请问有vivado 2017.4及约束、仿真等相关必须了解的工具知识等的中文书籍推荐吗?谢谢。
约束中的六行代码是:
set_property CFGBVS VCCO
set_property CONFIG_VOLTAGE 3.3
set_property BITSTREAM.GENERAL.COMPRESS true
set_property BITSTREAM.CONFIG.CONFIGRATE 50
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE Yes
为了仿真,修改的顶层文件是:
module HDMI_display_Demon(
input clk_50M,
input KEY,
output VGA_R,
output VGA_G,
output VGA_B,
output VGA_HS,
output VGA_VS,
output VGA_DE,
/*output HDMI_CLK_P,
output HDMI_CLK_N,
output HDMI_D2_P,
output HDMI_D2_N,
output HDMI_D1_P,
output HDMI_D1_N,
output HDMI_D0_P,
output HDMI_D0_N,*/
output LED
);
wire pixclk;
//wire R,G,B;
//wire HS,VS,DE;
hdmi_data_gen u_hdmi_data_gen
(
.pix_clk (pixclk),
.turn_mode (KEY),
.VGA_R (VGA_R),
.VGA_G (VGA_G),
.VGA_B (VGA_B),
.VGA_HS (VGA_HS),
.VGA_VS (VGA_VS),
.VGA_DE (VGA_DE),
/* .VGA_R (R),
.VGA_G (G),
.VGA_B (B),
.VGA_HS (HS),
.VGA_VS (VS),
.VGA_DE (DE),*/
.mode (LED)
);
wire serclk;
wire lock;
wireRGB;
//assign RGB={R,G,B};
/*
HDMI_FPGA_ML_0 u_HDMI
(
.PXLCLK_I (pixclk),
.PXLCLK_5X_I (serclk),
.LOCKED_I (lock),
.RST_N (1'b1),
.VGA_HS (HS),
.VGA_VS (VS),
.VGA_DE (DE),
.VGA_RGB (RGB),
.HDMI_CLK_P (HDMI_CLK_P),
.HDMI_CLK_N (HDMI_CLK_N),
.HDMI_D2_P (HDMI_D2_P),
.HDMI_D2_N (HDMI_D2_N),
.HDMI_D1_P (HDMI_D1_P),
.HDMI_D1_N (HDMI_D1_N),
.HDMI_D0_P (HDMI_D0_P),
.HDMI_D0_N (HDMI_D0_N)
); */
hdmi_clk u_clk
(
.clk_in1 (clk_50M),
.resetn (1'b1),
.clk_out1 (pixclk),
.clk_out2 (serclk),
.locked (lock)
);
endmodule
本帖最后由 玛瑙_重获新生i 于 2020-2-8 15:30 编辑
代码修改得应该还是有问题,综合没有成功。约束文件中,VGA_R等都是8bit,每个bit都需要连接到一个pin脚。没改了。 本帖最后由 玛瑙_重获新生i 于 2020-2-8 15:24 编辑
msxbo 发表于 2020-2-7 21:02
1、HDMI信号不支持仿真,可以把HDMI调用接口注释,引出RGB接口仿真
2、if(1'b0) 就是完成上电复位,仿真跑 ...
1.我将.XDC约束文件中的HDMI差分引脚都都注销了,可以综合了。但是 RUN Behavioral simulation仍然报上面的两错误。再将RGB的接口的约束,填入XDC文件中,可以综合,但Behavioral中,仍报那两错误。不晓得怎么搞了。呵呵…… 运行CH06按键去抖项目的行为仿真,又没问题。仿真时的该两报错,应该不像网上说的,是vivado软件问题。在IP Source栏,将HDMI差分信号的IP core禁用了,仿真时仍报错。
set_property IOSTANDARD LVCMOS15
set_property IOSTANDARD LVCMOS33
#set_property IOSTANDARD TMDS_33
#set_property IOSTANDARD TMDS_33
#set_property IOSTANDARD TMDS_33
#set_property IOSTANDARD TMDS_33
set_property IOSTANDARD TMDS_33
set_property IOSTANDARD TMDS_33
set_property IOSTANDARD TMDS_33
set_property IOSTANDARD TMDS_33
set_property IOSTANDARD TMDS_33
set_property IOSTANDARD TMDS_33
set_property PACKAGE_PIN V4
set_property PACKAGE_PIN N13
#set_property PACKAGE_PIN C18
#set_property PACKAGE_PIN B15
#set_property PACKAGE_PIN B21
#set_property PACKAGE_PIN C22
set_property PACKAGE_PIN C18
set_property PACKAGE_PIN B15
set_property PACKAGE_PIN B21
set_property PACKAGE_PIN C22
set_property PACKAGE_PIN A21
set_property PACKAGE_PIN B22
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property PACKAGE_PIN E21 }]
set_property PACKAGE_PIN D21 }]
set_property PACKAGE_PIN E22 }]
set_property PACKAGE_PIN D22 }]
set_property CFGBVS VCCO
set_property CONFIG_VOLTAGE 3.3
set_property BITSTREAM.GENERAL.COMPRESS true
set_property BITSTREAM.CONFIG.CONFIGRATE 50
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE Yes
页:
[1]
2