Giter Site home page Giter Site logo

lnls-dig / bpm-gw Goto Github PK

View Code? Open in Web Editor NEW
11.0 9.0 2.0 20.47 MB

Repository containing the gateware for the Beam Position Monitor project

License: GNU Lesser General Public License v3.0

Python 0.72% VHDL 36.36% C 44.07% Shell 0.21% Tcl 4.77% C++ 1.11% Assembly 0.45% Makefile 0.32% MATLAB 0.20% HTML 10.25% SystemVerilog 0.36% Verilog 0.59% Stata 0.60%
afc amc fmc fpga bpm

bpm-gw's People

Contributors

abyszuk avatar andreewpl avatar augustofg avatar aylons avatar danielot avatar guilhermerc avatar lerwys avatar melissa-aguiar avatar mmdonatti avatar vfinotti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bpm-gw's Issues

[wb_acq_core] Check lmt_curr_chan_id signal and its use

Problem: Some internal modules sync lmt_curr_chan_id signal with fs_clk_i, which is wrong, as the lmt_curr_chan_id signal is sync'ed with ext_clk_i. This does not apparently causes problems, as this signal are static and changed only at the beginning of each acquisition.

[soon-to-be fmc-port] Add g_with_bufio and g_with_bufr

Issue by lerwys
Tuesday Aug 27, 2013 at 02:15 GMT
Originally opened as lerwys/bpm-sw-old-backup#24


This will allow selecting if we want the incoming clock to be routed to BUFIO and/or BUFR primitive. This effectively will clock an IDDR primitive with BUFIO and local FPGA logic with BUFR. Later, all data will be synch'ed to a global reference clock.

Cauting is taken to ensure safe passage from one clock domain to another with Async FIFOs

[pcie_core] [dbe_bpm_dsp] XDC files references nets Vivado can't find

PROBLEM: Some constraints in pcie_core.xdc and dbe_bpm_dsp.xdc are commented and marked as FIXME because Vivado can' t find the proper nets after migration from ISE. These constraints do not prevent proper operation of the core, but may be leading to inefficiencies during implementation.

Possible Solution: This is probably caused by the nets being differently referenced in Vivado due to hierarchy. Finding a proper way to reference the same net using the new XDC features should solve the problem.

[all] Implement SDB-1.1 structures

Problem: Often, we need to know which firmware version we are running.

Solution: So, using SDB-1.1,which already support integration records, would solve the issue neatly

[CLOSED] Replace IBUFGDS to IBUFDS

Issue by lerwys
Tuesday Dec 04, 2012 at 02:15 GMT
Originally opened as lerwys/bpm-sw-old-backup#4


These are the same primitive, but the former instructs the mapper to use only global clock nets
(GCLK pins). BUT, as we know, we need to use non global clock nets in order to use BUFIO/BUFR primitives.

This possibly causes the error:

"ERROR:Place:1119 - The I/O components "adc_clk1_p_i" and "adc_clk1_n_i" are the
P- and N-sides of a differential I/O pair. The component "adc_clk1_p_i"
needs to be placed in a IOBM site and component "adc_clk1_n_i" in the
adjacent IOBS site within the same I/O tile. The following issue has been
detected:
Some of the logic associated with this structure is locked. This should cause
the rest of the logic to be locked. A problem was found at site BUFR_X0Y3
where we must place IOB adc_clk1_n_i in order to satisfy the relative
placement requirements of this logic. It is not legal to place this component
in this site. "

[dbe_common] [clock_driver] Reset synch MAX_FANOUT attribute must be reviewed

Problem: Vivado MAX_FANOUT attribute is now a integer and a hard limit - you must give a number and it will be strictly followed by the tool. The REDUCE attribute was deprecated, and to give the tool a soft-limit, you must set it outside the VHDL, in the project properties according to UG901. Check FIXME tags in files reset_synch.vhd and xlclockdriver.vhd.

Possible solution: Manually find a good number for MAX_FANOUT, or maybe use a constraint to nod the tool in the right direction.

[wb_acq_core:acq_fc_fifo] Optimize Flow Control Buffer

Problem: As of now, we are using FFs to serve as circular buffer for data words. However, the data word width can get as large as 1024 bits and 4 to 8 words depth, accounting for a lot of resources.

Solution: Change circular buffer to a DPRAM

[wb_fmc130m_4ch] ADC clock current delay value not used

Problem: The current ADC clock delay used in the Delay primitive is not used. We only output the current delay for the data channels. This can cause confusion for the software, as the value read in the registers will not be the same as the value just written. This does not produce wrong results, but is confusing on readback tests, for instance.

Possible solution: Output the current ADC clock delay in another Wishbone register.

[wb_acq_core] Core can hang the DDR3 grant line forever

Problem: The acquisition core does not have any means of releasing the DDR3 grant line if anything wrong happens. This can make the DDR3 read/write unusable for any other module in the system.

Possible Solutions: Maybe some sort of timeout mechanism should be added to the acquisition core. Another approach, more complex but cleaner would be add a smarter arbiter for multiplexing access to DDR3.

[pcie-core] Fix missing signal

Issue by lerwys
Wednesday Dec 04, 2013 at 01:12 GMT
Originally opened as lerwys/bpm-sw-old-backup#29


We should always test our designs before committing it!

/home/lerwys/Repos/bpm-sw-test-pcie/hdl/top/pcie/top_ml605.vhd" Line 183: Formal port/generic <rst_act_low> is not declared in <bpm_pcie_ml605>

[wb_acq_core] Fix unsafe start flag

Problem: The Acquisition Core start flag always triggers the logic, regardless if we are in the middle of a transaction or not.

Solution: Add another register to check if we are in the middle of a transaction. If we are, simply don't allow the user to start an acquisition.

[pcie_core] Cannot access DDR data from high address

Problem: We can't read data from DDR from pages larger than 10-bits.

The problem appears when I try to read the DDR memory from AFCv3 through
PCIe. As I'm aware the DDR size is 4 GB (2^30 words of 32 bit = 4GB), right?

With that in mind I'm trying to read from DDR page 896, for instance. This gives us
1110000000 in binary, which are 10 bits. So far, so good.

When I try to read from DDR page 1152, which is 10010000000 (11 bits) in binary,
I don't get any valid data, just garbage.

Having a look at rx_MRd_Channel.vhd, which is located in https://github.com/lnls-dig/bpm-gw/blob/devel/hdl/modules/pcie/common/rx_MRd_Channel.vhd (I don't know if this is the
right place to look for this issue) file I see the following lines where sdram_pg is used:

392 pioCplD_din(C_CHBUF_DDA_BIT_TOP downto C_CHBUF_DDA_BIT_BOT)                  
393   <= sdram_pg(C_CHBUF_DDA_BIT_TOP-C_CHBUF_DDA_BIT_BOT-C_DDR_PG_WIDTH downto 0) &
394       m_axis_rx_tdata_r1(C_DDR_PG_WIDTH-1+32 downto 0+32);
...
412 pioCplD_din(C_CHBUF_DDA_BIT_TOP downto C_CHBUF_DDA_BIT_BOT)       
413   <= sdram_pg(C_CHBUF_DDA_BIT_TOP-C_CHBUF_DDA_BIT_BOT-C_DDR_PG_WIDTH downto 0) &  
414       m_axis_rx_tdata_r1(C_DDR_PG_WIDTH-1 downto 0); 

If my math is correct sdram_pg(C_CHBUF_DDA_BIT_TOP-C_CHBUF_DDA_BIT_BOT-C_DDR_PG_WIDTH downto 0) translates to sdram_pg(9 downto 0), which has only the 10 LSB.

[wb_acq_core] Implement channel properties over Wishbone

Problem: There is a need to know which acquisition channels are valid, so we could avoid hardcoding this value in software.

**Solution:**A good approach would be to export the valid channels, as well as its properties over Wishbone. With this, we would be able to read this and check accordingly, as mentioned on github issue lnls-dig/bpm-sw#21

[top,syn] sanitize project folders

Problem: Top projecct names are very long like dbe_bpm_dsp_fmc130m_4ch_2_to_1_mux_ddr_2_3 and not much descriptive.

Solution: Remove all outdated top modules and rename the current one to a suitable name

[wb_acq_core] Acquisition FIFO gets full when ext_clk_i is lower than fs_clk_i

Problem: If the write FIFO clock is higher than the read FIFO clock, and the interfaces are almost always reading/writing through the FIFO, eventually the FIFO will become full and we will start losing data. We didn't have this problem with the Virtex6, because the ext_clk_i was 200 MHz (2:1 DDR3 operation). Now, with Artix7, we have the ext_clk_i as 100 MHz (4:1 DDR3 operation).

Solution: However, the DDR3 interface is 256 bits, for Virtex6 and Artix7, and the acquisition FIFO is at most 64 bits. With this way, we can implement a multiple FIFO approach, in that each valid input data we write in a different FIFO and waits for 256 bits to accumulate.

[ethernet/ebone] Implement mux for ethernet packages?

Issue by lerwys
Thursday Dec 20, 2012 at 02:08 GMT
Originally opened as lerwys/bpm-sw-old-backup#9


Would it be viable to implement a mux in order to separate between etherbone packages and
other ones?

This is done for the white rabbit design. Specifically for the wr-core in which etherone packages
are redirect to etherbone and other messages to the rest of the FPGA fabric.

Study this possibility

[wb_acq_core] Fix crossing of control registers to ext_clk_i

Problem: The control registers are constrained to fs_clk_i and ext_clk_i, which is not necessary, as these registers are only read much time after changing them. Particularly, after the start flag is set.

Solution: Add more relaxed constraints to these paths

[top] Implement simple hearbeat scheme with AFC front panel leds

Problem: It's always nice to know if your firmware was correctly loaded. So we could have a simple heartbeat scheme.

Solution: This could be implmented using the RGB leds available on AFC front panel. Using a simple green LED blinking on 1Hz rate or similar should suffice.

[CLOSED] Make wb_stream more generic

Issue by lerwys
Thursday Nov 29, 2012 at 21:58 GMT
Originally opened as lerwys/bpm-sw-old-backup#2


It would be better if the wishbone streaming interface could be more generic,
allowing data sizes of 16, 32, 64 or 128 bits wide. Moreover, the xwb_source and
xwb_sink modules wouls have to be modified.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.