Jump to content

White Horse Software

Members
  • Posts

    9
  • Joined

  • Last visited

Posts posted by White Horse Software

  1. On 8/19/2023 at 12:52 PM, zygot said:

    Well I wanted to see your response before getting more explicit.

    Due to the limitations of VHDL you are only able to specify signal types as is defined by the IEEE libraries that you use.

    You want to use both ieee.std_logic_1164 and ieee.numeric_std libraries. These are not the best combination of choices. I suggest either using ieee.numeric_std, or ieee.std_logic_1164 and either ieee.std_logic_unsigned or ieee.std_logic_signed depending on what format your want to work with. As it stands, you will likely run into conflicts with the synthesis tools as it tries to figure out what you mean by the '+' or '-' operators; if not in this project then in more complex ones.

    Let's presume that you comment out ieee.numeric_std and go with the 1164 and unsigned libraries. You are constrained to putting std_logic or std_logic_vector types on your toplevel port list. The problem with this is that Vivado synthesis interprets these as single-ended IO signals requiring single-ended output buffers. You are probably thinking that since your constraints file declares IOSTANDARD TMDS_33, synthesis would understand that it needs to instantiate a differential output buffer. Unfortunately, this isn't how VIvado works. Don' ask me why, ask your tool vendor.  Your only recourse is to explicitly instantiate an appropriate differential output buffer, like OBUFDS, in your code to help out synthesis understand your design.  

    While you can get away with letting Vivado synthesis instantiate IO buffers for you, it's a much better idea to do this for yourself.

    Read UG472 Series7 Select IO User Manual for more information.

    Wanted to follow up and say thank you, inserting OBUFDS fixed the issue. Bitgen complete! Now on to further challenges...

  2. On 8/20/2023 at 6:40 AM, D@n said:

    If the XDC file is correct, the only thing left missing should be the instantiation of an OBUFDS.

    Here's an HDMI example instantiating such an OBUFDS.  (Yes, it's Verilog ... where I don't have to worry about which library I'm using for 10-bit integers.)

    Dan

    I can muddle through reading Verilog so this is appreciated. I'm at hobby level so I can afford to choose language based on personal preference. I tried getting into Verilog a while back but ended up favoring VHDL... that is, until the day the mysterious "perfect HDL language" materializes from forum discussions into reality.

  3. 2 minutes ago, zygot said:

    Well I wanted to see your response before getting more explicit.

    Due to the limitations of VHDL you are only able to specify signal types as is defined by the IEEE libraries that you use.

    You want to use both ieee.std_logic_1164 and ieee.numeric_std libraries. These are not the best choices. I suggest either using ieee.numeric_std, or ieee.std_logic_1164 and either ieee.std_logic_unsigned or ieee.std_logic_signed depending on what format your want to work with. As it stands, you will likely run into conflicts with the synthesis tools as it tries to figure out what you mean by the '+' or '-' operators; if not in this project then in more complex ones.

    Let's presume that you comment out ieee.numeric_std and go with the 1164 and unsigned libraries. You are constrained to putting std_logic or std_logic_vector types on your toplevel port list. The problem with this is that Vivado synthesis interprets these as single-ended IO signals requiring single-ended output buffers. You are probably thinking that since your constraints file declares IOSTANDARD TMDS_33, synthesis would understand that it needs to instantiate a differential output buffer. Unfortunately, this isn't how VIvado works. Don' ask me why, ask your tool vendor.  Your only recourse is to explicitly instantiate an appropriate differential output buffer, like OBUFDS, in your code to help out synthesis understand your design.  

    Read UG472 Series7 Select IO User Manual for more information.

    Okay, now I understand better. I was indeed thinking, like you said, that the constraints file would be all that is needed.

    I'll give this a shot. Thanks also for the UG472 ref.

  4. 3 hours ago, zygot said:

    This part of your question makes no sense at all. Of course your question is about both your VHDL and constraints; it always is. Your question is about a bitgen error that you have no idea how to resolve. The answer to your question is in your VHDL source.

    If your HDL source doesn't explicitly instantiate input or output buffers, then the tool will try and instantiate one for you based on your HDL source. A couple of other hints is that logic IO buffers are distinct from clock IO buffers, and single-ended IO buffers are not the same as differential IO buffers.

    Your HDL source and constraints must agree and the port names must match in both places.

     

    Thanks for the response. This same error is happening in a more substantial project, with other HDMI ports in use and actual (useful) circuit designs - I'm doing it all, no IP, partly as a hobby project. It simulates and even synthesizes with no issues. So my hope was to cut through the noise and recreate in a minimum-viable way for presenting the problem.

    > Your HDL source and constraints must agree and the port names must match in both places.

    Don't they? Sorry I'm in a rush at the moment, but glancing at the .vhdl and the .xdc, things like "hdmi_tx_clk_n" do in fact match up. Would you mind helping me better understand?

  5. Using Vivado 2020.1, with the Digilent-provided .xdc constraints and a simple .vhdl using HDMI TMDS ports.

    The project will not generate a bitstream because it fails with the error: "[DRC IOSTDTYPE-1] IOStandard Type: I/O port hdmi_tx_clk_n is Single-Ended but has an IOStandard of TMDS_33 which can only support Differential". In fact this error shows up for any of the HDMI ports I use.

    Does anything special need to be done to configure these ports? I don't see anything in the reference documentation.

    Please note this is not a question about how to set up .vhdl for actually using the HDMI ports properly. I'm simply pointing out I don't see how to even configure the ports for TMDS.

    The .xdc and .vhdl files are attached.

    Arty-Z7-20-Master.xdc test.vhdl

×
×
  • Create New...