Is it necessary to add a top level file? I have added the PL side logic (write) in the block diagram not in a top level file. It is printing value 0x00 at all the address of BRAM.
@SkyClaudius-wy6pv14 күн бұрын
I think this video very useful to me, thank you so much!
@lyem654Ай бұрын
Delete the music please.
@dvircoАй бұрын
When running implementation using the files on github I get timing errors. Did you also get them ?
@batkang.6268Ай бұрын
Have you find a solution for that ?
@batkang.6268Ай бұрын
I solve the problem with using the 2023.1 version of vivado.
@dcmajАй бұрын
@@batkang.6268 yes, I added an asynchronous fifo between the dma and hdmi module
@mamangdaya69692 ай бұрын
can you do the other trigonometry like tan,cotan,sinh etc?
@corkedminotaur02 ай бұрын
Nice song dude, thanks for the vid
@toheedh2 ай бұрын
can you upload a tutorial of doing this with only verilog coding
@FPGAPS2 ай бұрын
Great job! we can also use Ramp function + Lookup table (LUT) to generate the Sin & Cos values.
@stephenpeters43932 ай бұрын
Good video. Can you help me what if i am doing this for two number formats eg (1.8.8) and (1.8.0) how can you make them align first before the addition
@HaramiBalak-h2w3 ай бұрын
Hey can you make matched filter using verilog code . Can you plz help me . Its not available anywhere on internet
@shwetaj66223 ай бұрын
Hi thanks for the video, it was very informative. I have a doubt, can the DMA transfer more data like 4096 bytes? Using XaxiDma_SimpleTransfer.Can we specify the max packet length to be 4096 bytes? Thanks again
@amirchernin72543 ай бұрын
Is it a good practice to multiply numbers like that in verilog? I am dealing with some floating point calculations in one of my projects, and I need to calculate the multiplication of two 32 bit numbers. I used a multiplier block that has some latency, and had to do some coding and testbenching to make sure it works properly. I managed to make it work through pipelining the data, but it would be a lot easier to just use "*". But I'm not sure how the synthesizer would do it. I remember once getting time issues for something like that.
@uzoqboyummatov61113 ай бұрын
great video! Thank you for your effort. Could you please comment, how PS can get access to PL-side external nand flash ?
@zeese5_travel4 ай бұрын
Hi! Where can I download the verilog and c code file?
@AnkitPandey-w8e4 ай бұрын
Could you please provide this code
@carysmacintyre81735 ай бұрын
I cannot seem to run the simulation, the system report is all find but I get a native link error. when I use the ‘analysis and synthesis’ button on the test bench code i get an error in line 26 saying there is a syntax error ‘10500 VHDL syntax error at counter_tb.VHD(26) near text “)”; expecting “(“, or an identifier, or unary operator’. But I am sure there is no difference between the code you have written and what I have written, but overall a super clear and easy to follow vid so thanks
@مصطفىمصطفى-ض8ج5ي5 ай бұрын
Which ordre of this FILTER ?
@bachur63065 ай бұрын
hey, why do you make 1.3.28 and not 1.2.28 fixed point from multiplying two 1.1.14 and why do you increase the integer part of the number by 1 each time sum index increases? second questions, how do we know that we can only cut the oldest bits at the end? thanks in advance
@kuzeybayer78365 ай бұрын
cordic_0 is not compiled in library 'xil_defaultlib'
@kuzeybayer78365 ай бұрын
cordic_0 is not compiled in library 'xil_defaultlib'
@kuzeybayer78366 ай бұрын
cordic_0 is not compiled in library 'xil_defaultlib'
@kuzeybayer78366 ай бұрын
cordic_0 is not compiled in library 'xil_defaultlib'
@sbhtkfxph44446 ай бұрын
hy, how can i get the coefficient numbers? there is easy way to know them?
@game2money6 ай бұрын
useful to me
@NithinVarghese-zk4vt6 ай бұрын
can you do a video on read and write in NVME SSD?
@LOCHA-fc3km7 ай бұрын
You are awesome, keep going
@yanjiahao87727 ай бұрын
Thank you so much, it's the best approach I found so far, really helps me figure out my fir filter design multiplier block, appreciate a lot!
@ngocmanprocoder7 ай бұрын
hi, i have a question, and I need your assistance. When does DMA stop reading? Many thanks.
@17charles57 ай бұрын
搖旗倒讃 高歌離席
@JamesLee-ub4rm7 ай бұрын
超爛
@pauleyermann6518 ай бұрын
If you want the video to be useful please remove that stupid music and click around more slowly
@adelynul8 ай бұрын
Music name?
@muhammedalikaya2688 ай бұрын
Thanks sir, I want to show a picture on the HDMI monitor. For this, I load the image data from block ram as a coe file. Would it be enough if I use the tmds_encode, tmds_oserdes and hdmi_transmit modules as you did to do the HDMI part?
@GauravKatiyar-yi8ro8 ай бұрын
fir_tb.v module fir_tb(); localparam CORDIC_CLK_PERIOD = 1250; // Clock period for the CORDIC at 800 Hz localparam FIR_CLK_PERIOD = 1250; // Clock period for the FIR filter at 800 Hz localparam signed [15:0] PI_POS = 16'h6488; // Positive PI constant localparam signed [15:0] PI_NEG = 16'h9878; // Negative PI constant localparam PHASE_INC_150HZ = 122; // Phase increment for 150 Hz signal at 800 Hz localparam PHASE_INC_400HZ = 326; // Phase increment for 400 Hz signal at 800 Hz reg cordic_clk = 1'b0; reg fir_clk = 1'b0; reg phase_tvalid = 1'b0; reg signed [15:0] phase_150Hz = 0; reg signed [15:0] phase_400Hz = 0; wire sincos_150Hz_tvalid; wire signed [15:0] sin_150Hz, cos_150Hz; wire sincos_400Hz_tvalid; wire signed [15:0] sin_400Hz, cos_400Hz; reg signed [15:0] noisy_signal = 0; wire signed [15:0] filtered_signal; // Instantiate CORDIC for 150 Hz sine wave generation // Ensure cordic_0 is defined or imported in your project cordic_0 cordic_inst_150Hz( .aclk(cordic_clk), .s_axis_phase_tvalid(phase_tvalid), .s_axis_phase_tdata(phase_150Hz), .m_axis_dout_tvalid(sincos_150Hz_tvalid), .m_axis_dout_tdata({sin_150Hz, cos_150Hz}) ); // Instantiate CORDIC for 400 Hz sine wave generation cordic_0 cordic_inst_400Hz( .aclk(cordic_clk), .s_axis_phase_tvalid(phase_tvalid), .s_axis_phase_tdata(phase_400Hz), .m_axis_dout_tvalid(sincos_400Hz_tvalid), .m_axis_dout_tdata({sin_400Hz, cos_400Hz}) ); // Phase sweep for 150 Hz and 400 Hz sine wave generation always @(posedge cordic_clk) begin phase_tvalid <= 1'b1; // Update phase for 150 Hz sine wave if (phase_150Hz + PHASE_INC_150HZ < PI_POS) begin phase_150Hz <= phase_150Hz + PHASE_INC_150HZ; end else begin phase_150Hz <= PI_NEG + (phase_150Hz + PHASE_INC_150HZ - PI_POS); end // Update phase for 400 Hz sine wave if (phase_400Hz + PHASE_INC_400HZ < PI_POS) begin phase_400Hz <= phase_400Hz + PHASE_INC_400HZ; end else begin phase_400Hz <= PI_NEG + (phase_400Hz + PHASE_INC_400HZ - PI_POS); end end // Create 800 Hz Cordic clock always begin #(CORDIC_CLK_PERIOD / 2) cordic_clk = ~cordic_clk; end // Create 800 Hz FIR clock always begin #(FIR_CLK_PERIOD / 2) fir_clk = ~fir_clk; end // Generate the noisy signal by mixing 150 Hz and 400 Hz sine waves always @(posedge fir_clk) begin noisy_signal <= (sin_150Hz + sin_400Hz) >>> 1; // Average the sum of 150 Hz and 400 Hz sine waves end // Instantiate the 5-tap FIR filter module // Ensure fir_5tap is properly defined and imported in your project fir fir_5tap( .clk(fir_clk), .noisy_signal(noisy_signal), .filtered_signal(filtered_signal) ); endmodule
@SsDinesh-t2w8 ай бұрын
Code is not running
@rav2n8 ай бұрын
could the design be shared? maybe tcl
@edward40619 ай бұрын
Hi thanks for the tutorial. What changes i have to do if i want to send data from PL AXI SPI to PS DDR3 using DMA
@theoryandapplication71979 ай бұрын
thank you sir
@ArjunRam-pr5yb9 ай бұрын
please can you tell how its actually cofficient convert into hexadecimal value? it will be very help for me
@Serinebey139 ай бұрын
You're a legend! I've watched numerous tutorials, but when it comes to the test bench, you're the only one who writes the code from scratch. Major respect!
@donaldkelly30169 ай бұрын
When I build and debug as hardware, exit.c opens breakpoints at line16 and has unresolved inclusion of unistd.h commenting out sections of exit.c or entirety of exit.c does not resolve. exit.c is pausing the program right after successful print of "Zynq SoC acquisition to SD card", so right before initialization of drivers or at the initialization of the first driver. It appears that the initialization of the GPIO driver is maybe failing. I was getting following warning for XAxiDma_SimpleTransfer: passing argument 2 of 'XAxiDma_SimpleTransfer' makes integer from pointer without a cast [-Wint-conversion] I also had to change byte written to a UINT. Looks like XAxiDMA_SimpleTransfer wants a pointer, not an array for the 2nd argument. I the warning goes away when you dereference buf_acq_to_dma by passing "*buf_acq_to_dma" xilinx.github.io/embeddedsw.github.io/axidma/doc/html/api/group___a_x_i_d_m_a.html#ga32ca6099d7926297a4c17cdb4a19511b
@tl.nguyen.279 ай бұрын
Can I ask how to convert -91.75 to 16'h A440?
@vinisharamkumar41819 ай бұрын
The number representation followed is signed 2's complement. So the msb bit represents the sign For negative number sign bit is 1 and the remaining bits will be a 2s complete. A and B is 16 bit, and fractional value is 8 bit long and integer value is 8 bit long 1. Convert A440 to binary 1010010001000000 2. The msb denotes it's a negative number .so take 2s completement of the remaining number. 3. Be careful while considering the decimal point
@shravanilakhote73389 ай бұрын
Sir , is it okay to store the data in the bram using .coe file ? and how do you read the contents of the memory without using hardware ? is there any specific tcl command for that or i can read it through simulation ?
@알바트로스-r1p9 ай бұрын
XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR variable is auto generation????
@AnastasiosAntoniou-e6h10 ай бұрын
I would change the respective part of the code to this: begin phase_tvalid <= 1'b1; if ($signed(phase) + $signed(PHASE_INC) < $signed(PI_POS)) begin phase <= phase + PHASE_INC; end else begin phase <= PI_NEG; end end
@dillanrainerpereira80610 ай бұрын
Thank You
@GauravKatiyar-yi8ro8 ай бұрын
module fir_tb(); localparam CORDIC_CLK_PERIOD = 1250; // Clock period for the CORDIC at 800 Hz localparam FIR_CLK_PERIOD = 1250; // Clock period for the FIR filter at 800 Hz localparam signed [15:0] PI_POS = 16'h6488; // Positive PI constant localparam signed [15:0] PI_NEG = 16'h9878; // Negative PI constant localparam PHASE_INC_150HZ = 122; // Phase increment for 150 Hz signal at 800 Hz localparam PHASE_INC_400HZ = 326; // Phase increment for 400 Hz signal at 800 Hz reg cordic_clk = 1'b0; reg fir_clk = 1'b0; reg phase_tvalid = 1'b0; reg signed [15:0] phase_150Hz = 0; reg signed [15:0] phase_400Hz = 0; wire sincos_150Hz_tvalid; wire signed [15:0] sin_150Hz, cos_150Hz; wire sincos_400Hz_tvalid; wire signed [15:0] sin_400Hz, cos_400Hz; reg signed [15:0] noisy_signal = 0; wire signed [15:0] filtered_signal; // Instantiate CORDIC for 150 Hz sine wave generation // Ensure cordic_0 is defined or imported in your project cordic_0 cordic_inst_150Hz( .aclk(cordic_clk), .s_axis_phase_tvalid(phase_tvalid), .s_axis_phase_tdata(phase_150Hz), .m_axis_dout_tvalid(sincos_150Hz_tvalid), .m_axis_dout_tdata({sin_150Hz, cos_150Hz}) ); // Instantiate CORDIC for 400 Hz sine wave generation cordic_0 cordic_inst_400Hz( .aclk(cordic_clk), .s_axis_phase_tvalid(phase_tvalid), .s_axis_phase_tdata(phase_400Hz), .m_axis_dout_tvalid(sincos_400Hz_tvalid), .m_axis_dout_tdata({sin_400Hz, cos_400Hz}) ); // Phase sweep for 150 Hz and 400 Hz sine wave generation always @(posedge cordic_clk) begin phase_tvalid <= 1'b1; // Update phase for 150 Hz sine wave if (phase_150Hz + PHASE_INC_150HZ < PI_POS) begin phase_150Hz <= phase_150Hz + PHASE_INC_150HZ; end else begin phase_150Hz <= PI_NEG + (phase_150Hz + PHASE_INC_150HZ - PI_POS); end // Update phase for 400 Hz sine wave if (phase_400Hz + PHASE_INC_400HZ < PI_POS) begin phase_400Hz <= phase_400Hz + PHASE_INC_400HZ; end else begin phase_400Hz <= PI_NEG + (phase_400Hz + PHASE_INC_400HZ - PI_POS); end end // Create 800 Hz Cordic clock always begin #(CORDIC_CLK_PERIOD / 2) cordic_clk = ~cordic_clk; end // Create 800 Hz FIR clock always begin #(FIR_CLK_PERIOD / 2) fir_clk = ~fir_clk; end // Generate the noisy signal by mixing 150 Hz and 400 Hz sine waves always @(posedge fir_clk) begin noisy_signal <= (sin_150Hz + sin_400Hz) >>> 1; // Average the sum of 150 Hz and 400 Hz sine waves end // Instantiate the 5-tap FIR filter module // Ensure fir_5tap is properly defined and imported in your project fir fir_5tap( .clk(fir_clk), .noisy_signal(noisy_signal), .filtered_signal(filtered_signal) ); endmodule
@sw391610 ай бұрын
Hi thanks for the video, dont you need to connect the fixed_io and DDR pins of the Zynq7 block in the PL via the auto connect?
@yianni28Ай бұрын
I am thinking the same thing. I followed this video for the Arty Z7-20 and I can program the FPGA but when I go to debug the application I get the error: "Error while launching program: Cannot reset APU. APB AP transaction error, DAP status 0xF0000021" Am trying again but this time after connecting the fixed_io and DDR pins via automation
@yianni28Ай бұрын
Update: Using Vivado 2024.1 Everything was resolved after I power cycled my board