OhmSweetOhm

Members
  • Content count

    8
  • Joined

  • Last visited

Community Reputation

0 Neutral

About OhmSweetOhm

  • Rank
    Newbie

Profile Information

  • Gender Male
  1. Hello Jack, I'm using a Microblaze with a simple interface (parallel 8 bit data and 4 controll lines) to send the data to the dac_man module. This could be improved using a simple SPI interface. In the Microblaze I have a static array with 256 values for the waveform. With a simple for loop I clock the data into the bram, using an auto increment and an adress reset. (I reset the address and then clock the data in) I have the 512 byte bram divided into two parts of 256 byte, so I can read from one block and write into the other, when all the data is written I can switch the blocks with a signal line. The waveform is static though but you could let the microblaze calculate it, or use the build in serial interface to recieve data from the pc. The microblaze project is in the zip file in the workspace/SoftProc_App. I simply followed this tutorial to get the microblaze running: http://jimselectronicsblog.blogspot.co.at/2014/03/implementing-microblaze-mcs-on-papilio.html, which you posted allready on the learning page. http://www.gadgetfactory.net/2014/03/microblaze-mcs-step-by-step-tutorial-for-the-papilio/ Thanks for the always quick response and the work you put into this. Ohm
  2. Hello I managed to solve the problem. Now I have an working arbitary wave gen with 100MS using this board: http://www.wayengineer.com/blackgold-high-speed-adda-module-for-fpga-development-board-p-2753.html#.VKVu_HubjDE and a papilio. The actual fix was quite simple, as there are two different clock domains in the system, 32MHz and 200MHz I guessed that the problem must be somewhere in the interface between the two clock domains. In my first post i used different clk edges on the bram but I made a mistake there because the r_en signal is only for one cycle high. So from rising edge to rising edge but the data is only stored in the ram at the rising edge so it didn't work. Now I use both ports at the falling edge, which I changed between posts. I also added a register stage for all the interface signals between the microblaze and my module. Now it works. Ohm dac_man.vhd
  3. Hello Jack, I had a look at the example as you said, in the example the function gen is realized through a LUT and only can produce sin, cos and square. I wanted to make an arbitary waveforme gen. I made a quick project with an array with static values and i read them out, the same as in my other project, simply with a FSM. It worked realy good but only the static values. I had a look at the technology schematic, there is clearly a dual port bram, which seems correctly wired. I also tried a few different procces properties and design strategies but everything exept the default values made it worse. I also buffered all the inputs for the bram with a register stage. If you want to have a look: https://www.dropbox.com/s/grpoczc0q0dk7l6/m_blaze_test.zip?dl=0 Thanks for your help. Happy new year! Ohm
  4. Hello I have a Problem i have a DAC that is controlled by the Papilio one 250k. I have a 512 byte array with a sine wave stored in it and I read the array to a IO port. Now the problem: It works most of the time if I programm it only to the FPGA. By working I mean that i can see a beautiful sine wave at the oszi. If I programm it several times it works not always, but the programming of the FPGA is so quick I can try until it works. If it doesn't work the wave form is periodic, not a sine tough. But this tells me that the read of the array works but not the write. If I programm the SPI flash it doesn't work and I get a wave form but it isn't a sine at all. I initalize the array a such: type memory_t is array(0 to 511) of std_logic_vector(7 downto 0);-- Declare the RAMsignal ram_bank : memory_t;and i access it as so: -------------------------------------------------------------------------- write Portprocess(clk_200)begin if(falling_edge(clk_200)) then if(w_en = '1') then ram_bank(to_integer(unsigned(add_w))) <= ram_in; end if; end if;end process; -------------------------------------------------------------------------- read Portprocess(clk_200)begin if(rising_edge(clk_200)) then if(r_en = '1') then ram_out <= ram_bank(to_integer(unsigned(add_r))); end if; end if;end process;I tried to run both processes at the rising edge but this doesn't work at all. The read and write is controlled by a FSM, there is never a read and write at the same time. As you can see I use the ram at 200MHz, is this to fast? I use a microblaze MCS to controll the hole thing, so the MCS has the array static in it and writes it to the dac controller fsm, it stores it in the array and after that it is read periodical. If anyone has a clue. Ohm dac_man.vhd
  5. .bmm Problems

    Thanks guys I managed to resolve it. In the bmm file there is e.g. PM_Inst/RAM_Word0 but I instantiated the AVR8 as block in the schematic with the name softproc. So I just had to add softproc/PM_Inst/RAM_Word0 for every entery in the bmm file. I am still a noob, soo... till next time. By the way, congratulations for you and your wife. Ohm
  6. .bmm Problems

    Thanks for the help but the error occures in the translation process, the FPGA editor only has the option for: post map, post place & route. Plan Ahead won't start, i tried to start it via tcl commands, but there is an JAVA error. Is there another way to update the bmm and find out the memory loc. In the meantime I tried this tutorial:http://jimselectronicsblog.blogspot.co.at/2014/03/implementing-microblaze-mcs-on-papilio.html Works great, now i have a microblaze in my design, but no longer the cool arduino lib. Ohm.
  7. .bmm Problems

    Hi I was trying to a add a custom peripheral to the AVR8 core and I wanted to use a schematic to connect it all. I simply copied the AVR8 250k Xilinx project and made a schematic symbol out of the AVR8 core, I commented the DCM out and added an external to better control the clocks of my project later. But I now have trouble to compile the hohle thing. I get a lot of errors. a picture:https://www.dropbox.com/s/v9ndbidje15g5rg/Neues%20Bild.bmp?dl=0 Processing BMM file "Papilio_AVR8.bmm" ... ERROR:NgdBuild:989 - Failed to process BMM information Papilio_AVR8.bmm and a lot of memory allocation leak errors. I changed nothing in the vhdl files, exept the DCM, I tried with the original DCM setup it isn't the reason for the errors. I don't know if this could be a reason, but the bmm file isn't in the same place in the hierarchy view of ISE, it is now outside of the Papilio_AVR8 and now part of the main schematic. (see picture) If someone has a clue.. Thanks
  8. Windows 8.1 (lots of Problems)

    I got my Papilio One 250k and wanted to try out the soft processor AVR8. I finally got it working, but on my way it ran into a few problems. The problems i encoutered: To install the Papilio loader properly on Windows 8 or Windows 8.1 i had to disable the driver signature verification. Then the upload of the bit and bmm file for the AVR8 worked fine. After that i wanted to upload a hex file. I tried the modyfied Arduino IDE but it doesn't worked. I had the same problem as: Thxe in April, he posted a solution for this problem:http://forum.gadgetfactory.net/index.php?/topic/1956-sync-with-child-error/ I had to alter the gwak command: $(GAWK) ' BEGIN{FS=" ";} { $1= ""; print $0 > "out.mem" } ' tmp.memand i downloaded a new mysys-1.0.dll, msys-1.0-vista64.zip from: http://www.madwizard.org/electronics/articles/winavrvista It worked for me, i could use the modyfied Arduino IDE to write and upload to the Papilio, also with a custom core. To write my custom core permanetly to the SPI flash I had to modyfie the makefile and the boards.txt files: http://forum.gadgetfactory.net/index.php?/topic/1199-burn-spi-flash-directly-from-arduino-ide-for-custom-core-designs/ worked like a charm. ##############################################################papilio_Custom250burn.name=Gadget Factory Papilio Custom 250K Board (Burn)papilio_Custom250burn.upload.tool=papiliopapilio_Custom250burn.upload.protocol=sam-bapapilio_Custom250burn.upload.use_1200bps_touch=truepapilio_Custom250burn.upload.wait_for_upload_port=falsepapilio_Custom250burn.upload.native_usb=falsepapilio_Custom250burn.upload.using=papilio_Custom250burnpapilio_Custom250burn.upload.maximum_size=16384papilio_Custom250burn.build.mcu=atmega103papilio_Custom250burn.build.f_cpu=16000000Lpapilio_Custom250burn.build.core=arduino##############################################################After all that i wanted to use Atmel Studio 6 to programm my c code. But it has no support for the ATmega103, i thought. I tried the makefile from the Arduino IDE but I couldn't get it to work. I found a solution for that, but I'm not entirely sure if all the periphials will worke: #define F_CPU 16000000#define __AVR_ATmega103__#include <avr/io.h>#include <util/delay.h>int main(void){ DDRA = 0xFF; PORTA = 0x00; while(1) { PORTA = PORTA + 1; }}It compiled with no error. So I wanted to use the Papilio loader to upload the bit, bmm, and the hex file to the 250k. I got an error from the data2mem application. I simply replaced the data2mem.exe from the loader install directory with the data2mem.exe from the tool directory of the zap IDE. Finally it compiled, and uploaded it to the Papilio and with a logic analyzer I could verify that it counts at PORTA. I'm not shure if I made any mistakes that caused all of that but I got it working! I hope this is somewhat helpfull.