Forum: /dev/null BLINKi Lattice MachX0 asm test


von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Tools:
Die Lattice Diamond V1.3
builds Mico8 on MachXO Control Developer Kit
Von der Hardware zur
Software in FPGAs
mit Embedded Prozessoren.
Stage: (1) the File: test.asm
##################################################################

;---BLINKi- Lattice MachX0 test
; Embed FPGA MCU Mico8 -IIII V1.0====------
; PROGRAM PREPARE
nop     # SPACE IRQ VECTOR
nop     #
nop     #
movi r15, LED_PORT_ADDR_40 ;
movi r14, 0x00 ; ## OUTPUT -->
movi r0,  0x03 ; ## WRITE
;================
; MAIN_LOOP

main_loop:
export r0, 0x00 ;## reg_r0 STORE GPIO
rol r0,r0       ;## rotate left reg0
; insert delay
  call delay    ;
b main_loop ; ## go MAIN_LOOP

delay:
movi r1, 0x00 ; clear-Regs.
movi r2, 0x00
movi r4, 0x00
outer_loop:
      addi r4,0x01  ; INC-R4
     middle_loop:
     addi r1,0x01 ; INC-R1
       inner_loop:
        addi r2, 0x01  ; INC-R2
        cmpi r2, 0xFF  ; ?Inner
       bzn inner_loop  ;
     cmpi r1, 0xFF     ; ?Middle
    bzn middle_loop    ;
    cmpi r4, 0x20      ;  ?Outer
    bzn outer_loop     ;
ret
; ENDE ASM

von Holger (Gast)


Lesenswert?

Mico8 Mico32 Embedded Processor
 ------------------------------------------------------------------------ 
-----
In Verilog *.v File is der ROM CODE somit indirekt der Synplify Synthese
zu übergeben.
Also braucht man ca. 6 bis 8 Tools und zwischenCode bis der Code in
dem MachX0 als *.JED File per JTAG ins FPGA Flash->RAM geht.
Und als EmbeddedApp. via FPGA Fabric Distribution ablaufen kann.
Und Userfreundlich via FPGA-CPLD/@\ WishBoneBus <-(?)--> 
Command-User-Interface
ein flexibles Plugin bereitstellt.
Beispiel:

########################################################################
##
"prom_init.hex" File-->
Einbinden der Mico8 @Engine -->Execute ROM CODE
Name: "prom_init.hex"
########################################################################
##
A Verilog Code Sniplet(1):

module isp8
           ( //clock and reset
            clk           ,
            rst_n         ,
......

wire [7:0]          ext_mem_din  ;
wire                ext_mem_wr   ;
wire                ext_mem_rd   ;

assign   ext_addr     = ext_addr_int;
assign   ext_io_dout  = ext_dout;
assign   ext_mem_dout = ext_dout;

  isp8_core # (
               "XO",
               "prom_init.hex",
               8,

......
Hint:
http://pbuchegger.at/download/_BaMICO8.pdf


########################################################################
Asm Tool: isp8asm_win.exe
isp8asm_win.exe control_SoC_demo.asm -o prom_init.hex -s 1024
########################################################################


####################/*.lst Listfile ##########################*/
Loc  Opcode  Opcode
Counter  (Hex)  (Bin)
0x0000  0x3309A  110011000010011010  b  int_handler
0x0001  0x10000  010000000000000000  nop
0x0002  0x10000  010000000000000000  nop
0x0003  0x2C005  101100000000000101  seti
0x0004  0x10000  010000000000000000  nop
0x0005  0x10000  010000000000000000  nop
0x0006  0x33001  110011000000000001  b  start
0x0007    start:
0x0007  0x3C529  111100010100101001  import  R05,#5
0x0008  0x10628  010000011000101000  mov  R06,R05
0x0009  0x165F0  010110010111110000  andi  R05,0xF0
0x000A  0x10728  010000011100101000  mov  R07,R05
0x000B  0x10530  010000010100110000  mov  R05,R06
0x000C  0x1650F  010110010100001111  andi  R05,0x0F
0x000D  0x11928  010001100100101000  mov  R25,R05
0x000E  0x22710  100010011100010000  cmpi  R07,0x10
0x000F  0x32004  110010000000000100  bz  phase2
0x0010  0x22720  100010011100100000  cmpi  R07,0x20
0x0011  0x32002  110010000000000010  bz  phase2
0x0012  0x333F5  110011001111110101  b  start

0x0013    phase2:
Sythes Phase
########################################################################
/* synthesis 
INITVAL_00="0x3200422710119281650F1053010728165F0106283C5293300110000100 
002C00510000100003309A"  */
  /* synthesis 
INITVAL_01="0x32002227203203822710333EC320022390432004239033200623902320 
0823901333F53200222720"  */
  /* synthesis 
INITVAL_02="0x333FB323D922000370173C00002001327FC220100A0013701D3C000123 
00122001210012000333E7"  */
  /* synthesis 
INITVAL_03="0x0BE0113D00327F623DFF0BD01100001000010000100001000010000100 
00100001000013E0013D00"  */
**************************************************************
Hint:
0x2C005 is Opcode seti
######################################################################## 
###

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

MachXO Control Developer Kit mit REFDESIGNS als Source Code
NV FPGA Derivat : Lattice MachXO LCMXO2280C
control_SoC_demo.ldf --> Lattice Diamond Design-File
######################################################################## 
##
C:\B_CPLD2\Demo_MachXO_Control_SoC\source\imp

Der uptime_wb.v Verilog Code habe ich via Project Manager gemoddet.
*.syn import to Lattice Diamond V3.1.487 Project. -->>

C:\B_CPLD2\Demo_MachXO_Control_SoC\project\control_SoC_demo.ldf
----------------------------------------------------------------
2* uptime_wb.v ???
C:\B_CPLD2\Demo_MachXO_Control_SoC\source\uptime_wb.v
C:\B_CPLD2\Demo_MachXO_Control_SoC\project\impl1\source\uptime_wb.v
----------------------------------------------------------------
C:\B_CPLD2\Demo_MachXO_Control_SoC\project\prom_init.hex
-------------------------------------------#####################
C:\B_CPLD2\Demo_MachXO_Control_SoC\project\
impl1\source\uptime_wb.v
######-------###########



Path impl1
C:\B_CPLD2\Demo_MachXO_Control_SoC\project\
impl1\source\uptime_wb.v

 /* Fu-Knoten : A4-Definition*/
  always@(posedge sec_clock or posedge rst_i) begin
    if (rst_i)
  begin /* Clear */
      hours  <= 0; /*Zero-HH:MM:SS $08_Bit_Spur*/
      minutes <= 0;
      seconds <= 0;
    end
    else begin
      if (seconds[7:0] < 59) begin //
        seconds <= seconds + 1;
      end
      else begin
        minutes <= minutes + (1); // INC_Minutes
        seconds <= 0;
        if (minutes > 58) begin // 59??
          minutes <= 0;
          hours <= hours + 1;
        end
      end
    end
  end

endmodule
/* ENDE */
Das Menue geht und ist Command Interface via WishBone Bus @Interface
   Prozessanschluss#$(00)  <-->UART V24 --(Terminal)--USER-PC
#######################################################################
Register Rules r0---
######################################################################## 
###
;Sub_1 UART-I/O-WishBone Bus
.equ UART,           0x00 ; @!Base_Adress$(00)
.equ ADC,            0x10 ;
.equ SPI,            0xA0 ; 1010 0000 0000 0000 [0000 0000] - 1010 1111 
; 1111 1111 [1111 1111] (0xA00000-0xAFFFFF)
.equ TIMER,          0xB0 ;
************************************************************************ 
***
;!@UART REGISTERS
.equ REG_UART_DATA,  0x00 ; NULL
.equ REG_UART_IER,   0x01
.equ REG_UART_LCR,   0x03
.equ REG_UART_LSR,   0x05
######################################################################## 
###
-----------------------
;**Code Sniplet to do Mico8 WishBone  u. Lattice Asm Syntax lernen
-----------------------
Hint: Read  import r5 ; via Reg$05
            export
; UART,           0x00
.equ REG_UART_DATA,  0x00

get_char:
  movi r15,UART
  import r5, REG_UART_DATA ; Read from UART
  cmpi r5, 'm'
  bz init_menu
  cmpi r5, 't'
  callz read_uptime
.....
-----------------------
;---================------
; PROGRAM PREPARE
nop     # SPACE IRQ VECTOR
nop     #
nop     #
movi r15, LED_PORT_ADDR_40 ;
movi r14, 0x00 ; ## OUTPUT -->
movi r0,  0x03 ; ## WRITE
;================
; MAIN_LOOP

main_loop:
export r0, 0x00 ;## reg_r0 STORE GPIO
rol r0,r0       ;## rotate left reg0
; insert delay
  call delay    ;
b main_loop ; ## go MAIN_LOOP
-------------------------------------------
###########################################
SPI SNIPLET
; SOFT SPI CORE REGISTERS
.equ REG_SPI_RXDATA, 0x00
.equ REG_SPI_TXDATA, 0x04
.equ REG_SPI_STATUS, 0x08
.equ REG_SPI_CONTROL,0x0C
.equ REG_SPI_SSEL,   0x10
init_spi:
  movi r15, SPI ; $A0 b1010 reg15
  movi r0, 0x01     ; SPI Select
  export r0, REG_SPI_SSEL ; $10

  movi r3, 0x80     ; Turn on SSO bit
  export r3, REG_SPI_CONTROL   ; $0C SPI Control
;---================------

von Holger (Gast)


Lesenswert?

http://pbuchegger.at/download/_BaMICO8.pdf
> Zitat händisch move *.pl to cygin/bin

Aber das denke ich nicht
Fazit:
makefile mit z.B lm8-deployer.pl
sind auf einer make_File-Ebene .
##############################
LatticeMico8 Development
Tools User Guide
##############################
------------------------------
Hint: lm8_dev_tools_ug.pdf
      GNU-based Compiler Tools
------via-multible -RUN-CASCADE-STAGES----
------PowerTools Force at make tool
Hint: make Makefile
      make all
-------------------------------------------
*******************************************
cygwin
gtools ----> PATH
##############################
   --------------------------- tree
 ******************************************
PATH
C:\LatticeMico8\gtools\bin
##############################
Hint:
makefile Home Base ???
*.pl  *.pl means Perl Script files like 
C:\LatticeMico8\scripts\lm8-deployer.pl
*.pl In same file-Folder as the Makefile resides
-- *.pl File Hosted in ..\scripts\
lm8_linker.ld,
lm8_linker_large.ld,lm8_linker_medium.ld,lm8_linker_small.ld
------------------------------------------------------------------------ 
-------
Ende 1

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

MachX0  Control Develop Kit
Later i will use the new MachX02 with [{preengeneerd}] Embed. Stuff
Fast State 10 case State Engine @2 clk Stoke --1Step....
@Lattice Semiconductor Corporation.
Build Digital@+Analog FPGA inside ispPAC 30

Hint: Look in the owm Diamond IDE
 C:\lscc\LatticeMicoSystem\2.0\micosystem\components\gpio\drivers
Hint:
http://www.latticesemi.com/documents/MachXO%20PLDs%20in%20System%20Control%20Designs.pdf
Hint: compile & run your own stuff Projects
http://www.latticesemi.com/documents/LatticeMico8Tutorial.pdf

# ------------------------------------------------------------------
######################################################################## 
#
------------------------------------------------------------------------ 
-
rem prom_init.hex" , "menue.hex"
rem prom_init.v
------------------------------------------------------------------------ 
-
"menue.hex" habe ich mit hex patch gemoddet. siehe Bild
kommt aus ( EBR)? EmbededBlockRam via UART Print Routine.
bingo>
Das ist *.jed File (mit Bin..Stuff Fuse-Map drin. )
######################################################################## 
#

Hint:
0x2C005 is Opcode seti

Thema(1)
Hint:
Da oben in co.asm ist der ProzessAnschluss# nich wie bei mir.
Den co.asm muss ich also auch noch auf mein spezi. WishBone Modell 
modden.

-------ACK:STACK_STUKTUR:----------------------------------------------- 
-------
assign wb_ack = {
                   1'b0,              // Device #15 (UNUSED)
                   ebr_ack,           // Device #14 ACK (EBR)? 
EmbededBlockRam
                   1'b0,              // Device #13 (UNUSED)
                   sram_ack,          // Device #12 ACK (SRAM)
                   1'b0,              // Device #11 (UNUSED)
                   spi_ack,           // Device #10 ACK (SPI)
                   1'b0,              // Device #9 (UNUSED)
                   lcd_ack,           // Device #8 ACK (LCD)
                   1'b0,              // Device #7 (UNUSED)
                   fan_ack,           // Device #6 ACK (fan)
                   1'b0,              // Device #5 (UNUSED)
                   led_sw_ack,        // Device #4 ACK (LED/Switches)
                   i2c2_ack,          // Device #3 ACK (PM I2C)
                   i2c_ack,           // Device #2 ACK (I2C)
                   timer_ack,         // Device #1 (TIMER)
           /*FU''#01*/
                   uart_ack           // Device #0 ACK (UART)
           /*ProzessAnschluss_nummer FU-UART-AT'BASE_00*/
                   };
######################################################################## 
######

UART ProzessAnschluss# ist nicht 0 sondern

Der Lattice MachXO WishBoneBus ist so einfach wie telefonieren.
also File co.asm analysieren.
Fazit:
Prozess: Register Rules. and Procedure Steps
+++++++++++++++++++++++++++
Reg R15 auf Uart_0 also erst mal in meinem "Daten_Modell"  Null 
eintragen
................
................

  // movi   r15, TIMER_1
  // export r0, 0x00  ;; issue a 'write' to latch the current time value
  // import r4, 0x02  ;; wahl case hour byte of latched time value
  // .... call wait_for_uart_txrdy
   via r4 import kommt der StundenWert der als Addr_select 0x02 hat 
raus.
   >bigo
   nun noch das spezielle r4 Register als Param_werte auf ascii_BCD 
modden
   und an den UART mit respective des Timings(wait_for_uart_txrdy) ect. 
rausgeben.
   >Bingo.


######################################################################## 
#

von Holger (Gast)


Lesenswert?

Holger erster IRQ PseudoCode mit Eckdaten
## ResetMode> Mico8 PC =00000
org 00 ## store prog_conter absolut  jmp start_m
b startup_1 # jump ZILOG EZ8 ENCORE ???
##############################
###############################
org 02 ## vector irq trap
int_handler:
nop
nop
nop
nop
reti ## return from 'IRQ_?
#####################################
##
###
####
##----------------------------------
org 38 # like the ZILOG EZ8 ENCORE
startup_1: # Label_1
 seti # first set the program to be able to receive interrupt
      # and push
nop
nop
  if (irq_flg) ??
  clear irq_flg ;
nop
nop
b start_main_2 ## absolut JUMP
 ## free space ROM


###################################
org 100
start_main_2: # main_2 loop
    Call App_Run_forever ## Call SubRoutine
b start_main_2 # JMP back to start_main_2
org 120
##################################
App_Run_forever:
  nop
  nop
ret  ## Return from Sub
##########################################
To do:
Param mystic secret optons for Lattice MachX0 Embed MCU
Check CallStack SratchPadMem
IRQ Handling PUSH regs POP Regs like
80C535 Keil ICC Compiler

von troll (Gast)


Lesenswert?

Was soll das hier eigentlich werden wenn es fertig ist?

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

## Fibronacci asm  as pdf.
##### Lattice Mico8 JMP $12 #########################
#####################################################
# Holgers *asm Design Pattern V1.0 'Reset--> PC=00000
#####################################################
b start
################################## Implementation

  b int_handler  ## ROLC Rd, Rb
  nop
  nop
# Hint:
# 0x2C005 is Opcode seti
    # MasterIRqEnable
  seti # ghot-set the program to be able to receive MachXO 
-CPUinterrupt-enable
  nop
  nop
  b  start ###'@execution'
    ## if irq_flg_hot? dont forget clri
start:
  import r5, 5 ##
  mov r6, r5
  andi r5, 0xf0  # masking r5 to decide type of program
  mov r7, r5

  mov r5, r6
  andi r5, 0x0f  # masking r5 to get the speed
  mov r25, r5

  cmpi r7, 0x10
  bz phase2
  cmpi r7, 0x20
  bz phase2 ####
  b start # go back
#######################
phase2:
      nop # waist time
######################
  b start‎ # go back
###########################################################
-----------------------------------------------------------

int_handler:
  #''call save_reg # saving all registers into the #scratchpad
  ## holg_make a scratchPad via Params
  movi r0, 0xfe
  movi r1, 0xfd
  movi r2, 0xfb
  movi r3, 0xf7
  movi r4, 0xef
  movi r5, 0xdf
  movi r6, 0xfe

  export r0, 0
  call wait_extend ## ??
  export r1, 1
  call wait_extend
  export r2, 2
  call wait_extend
  export r3, 3
  call wait_extend
  export r4, 4
  call wait_extend
  export r5, 5
  call wait_extend
  export r6, 6
  call wait_extend

  call load_reg    # load the values from scratchpad back to registers
## last but not least if irq_flg_hot? dont ffforget clri
#########################
  iret  ## end 'IRQ if irettuur ?? opcode instucion MCUdecoder ''IRQ_ACK 
#tick
### magic iret
################################################

###### holg.Zilog<-Pop_Stack
load_reg:
  lspi r31, r31
  subi r31, 1
  lspi r30, r31
      nop
  ret
###### holgZilog->Push_Stack
save_reg:
  movi r31, 0
  sspi r0, r31
  addi r31, 1
  sspi r1, r31
     ret
###############

von Klaus (Gast)


Lesenswert?

troll schrieb:
> Was soll das hier eigentlich werden wenn es fertig ist?

Ich vermute mal eine psychotische Dekompensation...   :-/

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Das ist was gutes für den FPGA CPU (Synthesized). USER
######################################################
Hint:
"Build from sratch via Bus Manager"
http://www.origin.xilinx.com/csi/training/embedded-design-with-the-xilinx-embedded-developer-kit.htm

So ist das im Xilinx MicroBlaze abgeleitet.
[code]
#include "xparameters.h"
#include "xiomodule.h"
int main()
{u32 data;
XIOModule gpi1;
volatile int i = 0; // wegen data Cache ???
int g = 0;
data = XIOModule_Initialize(&gpi1, XPAR_IOMODULE_0_DEVICE_ID);
data = XIOModule_Start(&gpi1);

xil_printf("-- Start of the Program --\r\n");
while (1)
{
data = XIOModule_DiscreteRead(&gpi1, 1);
XIOModule_DiscreteWrite(&gpi1, 1, data);
for (i=0; i<10000000; i++);
g = g+1;
xil_printf("-- run: %d --\r\n", g);
}
return 0;
}
[\code]
; HOLGER think FIXED ADDRES MAPPING UART 0x00,TIMER 0x10 .SPI. EBR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;; *** Utility Functions *** ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; The "IoReadWord" and "IoWriteWord" are
; used to read/write the IO Bus.
; "XIOModule_DiscreteRead" and "XIOModule_DiscreteWrite"
; used in SIMPLEX FAST LINK  as a local_Bus to the USER
; Custom Verilog_Sub_Modules as eg: uptime_wb.v defined
[code]
init_uart:
; : step_0
  movi r15, UART ; IoWriteWord_IO PLB_periperal_local_Bus_sect Version 
(v46).
; : step_1
  movi r0, 0x00  ; 'IER rx_tx_Interrupt ???
  export r0, REG_UART_IER ; !XIOModule_DiscreteWrite
; : step_2
  movi r0, 0x03  ; LCR rx+tx enable ???
  export r0, REG_UART_LCR ; !XIOModule_DiscreteWrite
; : step_3 Return from Subroutine ret opcode
  ret

[\code]
######################################################################## 
#######

[code]
; Hint: "WNR" means W-Rite NOT Read ___>___ issue a 
W-##Strobe-Bus-trigger event

; r4 runs via command "import r4,0x02"
;  ... 02,01,00 as via a address_index on FAST SIPLEX BUS
;      HH,MM,SS @R4
read_uptime:
 ;##################################################################
  movi r15, TIMER  ; PLB (v46) select (trigger--export r0,0x00)
  export r0, 0x00  ;; issue a 'read_$00' to latch the current time value
  import r4, 0x02  ;;; hour byte of latched time value
; ##################################################################
......

 call send_uart_data
;##################################################################
  movi r15, TIMER   ;  PLB (v46) select ()
  import r4, 0x01  ;;; minute byte of time of latched time value
 ;##################################################################
  call int2asc10   ; takes r4 and converts to BCD in r8,r7,r6
  mov r9, r7
  call send_uart_data
  mov r9, r6
  call send_uart_data
  movi r9, 'm'
  call send_uart_data
  ;##################################################################
  movi r15, TIMER   ;  PLB (v46) select ()
  import r4, 0x00  ;;; seconds byte of time of latched time value
 ;##################################################################
  call int2asc10   ; takes r4 and converts to BCD in r8,r7,r6
  mov r9, r7
  call send_uart_data
  mov r9, r6
  call send_uart_data
  movi r9, 's'
  call send_uart_data
  setz ; ????? SettZero what is that
  ret  ; Return from Subroutine
;************{ENDE UPTIME_PROC:(01)]***************************

[\code]



; idcode now in r4
; import as a Fetch and export as a Store, move r0 as a WNR
; Voacabulay: FORTH  Language Parameter Stack 
r15********************r4,***,r0
; First store a UART_TTY_0 in reg#15
;

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

1
;##################################################################
2
  movi r15, TIMER  ; PLB (v46) select (trigger--export r0,0x00)
3
  export r0, 0x00  ;; issue a 'read_$00' to latch the current time value
4
  import r4, 0x02  ;;; hour byte of latched time value
5
; ##################################################################
6
......r0 bleibt auf 0, somit ist lesen aktiv LOW ! via Reg: r0
7
;##################################################################
8
  movi r15, TIMER   ;  PLB (v46) select ()
9
  import r4, 0x01  ;;; minute byte of time of latched time value
10
11
  movi r15, TIMER   ;  PLB (v46) select ()
12
  import r4, 0x00  ;;; Sekunde byte of time of latched time value
Fazit in Reg: "r4" steht die Address z.B (0x02,0x01,0x00)
 mit dem Befehl "import r4, 00" ist die Sekunde in Register r4 drin.
 Bingo>.
 Danach kann der Inhalt von r4 als 8Bit Wert convertiert zu BCD Routine.
 Danach kommt der Sekunden.Wert an der UART-Schnittstelle raus.
Bingo>.

von Sascha W. (arno_nyhm)


Lesenswert?

Wie genau ist die Haar-Trockenhaube oben links an den MicroBlaze-Core 
angeschlossen?

von Holger H. (holger-h-hennef) Benutzerseite


Angehängte Dateien:

Lesenswert?

1
;  Anhang: Für Lattice MachXO Control Developer Kit SOC  
2
;          _Top Modul xo_control_soc_demo.v
3
;          MachXoMico8_reg1a.PNG
4
;          MachXoMico8_reg1b.PNG
5
; Interprozess via bidir [WISHBONE-Interface]
6
; PIPE UART <-->>TIMER-[Simplex-Sub_Bus_Addr]@Timer-Task# Diskrete:Read
7
; Verilog code 
8
               (snip). 
9
; isp8_core # (
10
;               "XO",           
11
;              "prom_init.hex",  // Import Verilog  
12
;                               (----snap--). 
13
; 
14
;######################################################################
15
; asm: export import Rules  
16
17
;  Register Rules r5,r9 
18
;                            r0,r4
19
; Register r9 ist das MachxO_Tx >Register, via PIN# (F6) uart_tx
20
;          r5 ist das MachxO_Rx <|Register via PIN# (F5) uart_rx
21
;
22
; #### LOCATE COMP "uart_rx" SITE "F5" ; #pull up 10K. 
23
; #### LOCATE COMP "uart_tx" SITE "F6" ;
24
;--------------------------------------------------------------
25
;    UART Base ist 0x00000 via Mapping Build Order as Fixed Address. 
26
;    LSR UART_Base +5 >LSR 0x0005 
27
;    (0x01) Maske Mach_RX 'bit_0 indicates "low" = Zeichen empf.   
28
;    (0x20) Maske Mach_Tx 'bit_5 "high" = Zeichen tx_pendig go&wait 
29
;;;;;;;;;;;; Letzter Stand: 29/11/2012 14:43 ;;;;;;;;;
30
; a_prom1.asm 
31
; prom_init.hex 
32
; PROGRAM PREPARE uart_tty_poll für Mico8 @Kernel V3.1 
33
; R0 auf NULL setzen ->> "lesen" 
34
;;;prom 1024 ; laenge genau anpassen $400 1K 8KBit 2 * M4K Block
35
;;;.org 0
36
;;;
37
;================----=================
38
; MAIN_UART_POLL 9600 
39
; To_do: besser auf quick 115200 nur @TxHold-Reg, 
40
; Immer wieder der gleiche Fehler den die Kernel-Designer 
41
; machen  kein TxShift-Reg ACK-   
42
; Das Shift-Register Empty ist Indikator fuer last 
43
; bit_emit bit as a Stop-Bit bingo>
44
; --Zeichen sind bei 2400 deshalb nicht ok. siehe ZILOG eZ8 Encore 
45
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
46
_start_up: ;;;;; Execute first Code at $0000:00000
47
;;;;;;;;;;
48
nop     ;# _start_up SPACE IRQ VECTOR !
49
nop     ;#
50
nop     ;#
51
start:  ; clear all:Registers  
52
;;; .org 12 
53
; <OPTION'Irq_Vector>@exec $0000<  
54
; seti         ; CPU Interrupt enable !!!!!!! 
55
56
; Hier geht es los 
57
;;;;__***********---------------------------------------
58
b Main_Loop_1  ; >>Branch ## Main_Loop_1
59
;;;;_***********----------------------------------------
60
61
;############[ init_uart ]#########################
62
init_uart:
63
; IRQ Enable        #EIR_1 --=)>(0x00)
64
; $03 RX|TX ENABLE  #LCR_3 --=)>(0x03)
65
;-----------------------------------
66
;*******************########**************
67
movi  r15,  0x00  ; UART_sel_WishBone_Controller_Interface>Mux_BUS.
68
;---------------------------------
69
movi   r0,  0x00  ; xor r0,r0  clear
70
export r0,  0x01  ; IE_Reg. NULL IRQ is disabled  
71
;-------------------------------
72
movi   r0,0x03    ; 
73
export r0,0x03    ; LCR (RX&TX) 0011
74
ret ; 
75
;;;;; End of init_uart ;;;;;;;;;;;;;
76
;############[ uart_rx_ready ]#########################
77
wait_for_uart_rx_ready: 
78
movi  r15,  0x00  ; #Uart_bus_sel.Readmode
79
uart_rx_rdy_loop:
80
  import r1, 0x05   ; LSR 
81
  and r1,0x01 ; mask out  
82
 cmpi r1,0x01 ; <>0
83
bnz uart_rx_rdy_loop
84
ret ; Return 
85
;;;;; wait_for_uart_rx_ready   ;;;;;;;;;;;;;
86
87
;############[ uart_tx_ready ]#########################
88
wait_for_uart_tx_ready: 
89
movi  r15,  0x00  ; #Uart_bus_sel.Read
90
uart_tx_rdy_loop:
91
  import r1, 0x05   ; LSR 
92
  and r1,0x20 ; mask out  
93
 cmpi r1,0x20 
94
bnz uart_tx_rdy_loop
95
ret ; Return 
96
;;;;; wait_for_uart_tx_ready  ;;;;;;;;;;;;;
97
98
;############[ Sub_wait_uart_key  ]##################
99
; returns r5 with data 
100
Sub_wait_uart_key:
101
 call wait_for_uart_rx_ready ; 
102
import r5, 0x00   ; REG_UART_DATA@ r5 !  
103
ret ; Return via r5
104
;;;;; Sub_wait_uart_key   ;;;;;;;;;;;;;
105
106
;############[ Sub_Uart_Send_Data  ]################
107
; movi r9, 0x41 -- A 
108
Sub_Uart_Send_Data:
109
call wait_for_uart_tx_ready ; 
110
export r9,0x00 ; r9@ Reg:UART_DATA ! | .machxO_tty.'emit ascii   
111
ret ; 
112
;;;;; Sub_Uart_Send_Data   ;;;;;;;;;;;;;
113
114
;---------------------------------------------------  
115
; [<INIT STUFF>]####################################
116
Main_Loop_1: 
117
118
call init_uart  ; IRQ, EN_TX&RX -->MCU  
119
120
;:::::::********************************************
121
main_poll_1:  ;  RUN-APP_1 ">>>Launch" 
122
;###################################
123
;########[Echo_Server_&Subs.]#####
124
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
125
; call delay              ; 
126
call Sub_wait_uart_key  ; key? (-- r5 )
127
movi r9,r5              ; r5 @ r9 ! 
128
call Sub_Uart_Send_Data ; ( r9 -- ) UART_DAT_§00 @ r5 !  
129
; call delay         ; 
130
;#################################
131
b main_poll_1     ; ## go back to  main_poll_1     
132
;::******'########################
133
; ***** END of a_prom1.asm ***************
134
;##############################################################
STOP

von Klaus (Gast)


Lesenswert?

Meine Fresse ist da ein Chaos bei dir im Oberstübchen!

von Holger H. (holger-h-hennef) Benutzerseite


Angehängte Dateien:

Lesenswert?

####################################################################
MachXoMico8_reg1b.PNG
To do:
Einstellen via Parameter: Ueber internal scratch Pad RAM,
 Call Stack Size .
 or nasty nested Calls via Return Adress ......Stack ...
Zitat:
I do remember the call/return capability was very useful as well as the 
internal scratch RAM. Debug could sometimes be a PITA due to having no 
internal visibility and being stuck with decoding adrs/data ports. They 
simulated well, too.
<>
Docu.
http://link.brightcove.com/services/player/bcpid1384165827001?bckey=AQ~~,AAAABAHLGok~,a3rQal6KQNvidwRyNdKEnQiIAYU82O5J&bctid=1826273843001
Hint: Für SOC Design
http://www.programmableplanet.com/author.asp?section_id=2030&doc_id=244784

von Holger H. (holger-h-hennef) Benutzerseite


Angehängte Dateien:

Lesenswert?

WISHBONE_READ_CYCLE
Der Befehl  inport  0x02 , r4  holt die Stunden (HH ) 
via  dat_o_reg4
Der Befehl  inport  0x01 , r4  holt die Minuten (( MM )) )
        via  dat_o_reg4
Der Befehl  inport  0x00 , r4  holt die Sekunden (((SS ))) ) 
via  dat_o_reg4
Hint: W/NR --> Write not_Read --> @READ is  AKTIV: @"Low"  bingo>
now  Think:  !AND  &&  wb_stb &&  WB_cycle_i
;  (! wb_we_i) && wb_stb_i && wb_cyc_i // <feed_Latch_Outregs  via 
shaddow R to user

WISHBONE SoC Architecture Specification, Revision B.3
http://cdn.opencores.org/downloads/wbspec_b3.pdf

von 80c386 (Gast)


Lesenswert?

c-declarations:
         auto accident;
         register voters;
         static electricity;
         struct by_lightning;
         void *where_prohibited;
         char broiled;
         short circuit;
         short changed;
         long johns;
         unsigned long letter;
         double entendre;
         double trouble;
         union organizer;
         float valve;
         short pants;
         union station;
         void check; unsigned check;
         struct dumb by[sizeof member];

von Holger (Gast)


Lesenswert?

// Switch Debounce Module
// use your system clock for the clock input
// to produce a synchronous, debounced output
module debounce (reset, clock, noisy, clean);
   parameter DELAY = 270000;   // .01 sec with a 27Mhz clock
   input reset, clock, noisy;
   output clean;

   reg [18:0] count;
   reg new, clean;

   always @(posedge clock or posedge reset)
     if (reset)
       begin
    count <= 0;
    new <= noisy;
    clean <= noisy;
       end
     else if (noisy != new)
       begin
    new <= noisy;
    count <= 0;
       end
     else if (count == DELAY)
       clean <= new;
     else
       count <= count+1;

endmodule

von Holger (Gast)


Lesenswert?

Das MachXo2 Breakout Board
#############################################################
http://www.latticesemi.com/documents/EB68.pdf
http://de.mouser.com/new/latticesemi/latticeXO2plds/
http://www.latticesemi.com/documents/EB68.pdf
http://www.latticesemi.com/lit/docs/technotes/tn1008.pdf
#############################################################
Hint: IP latticesemi/IP
IPExpress Tool Build via *.ipx File
lpf = ucf
*.s ist *.asm
---------------------------------------------------------
*.ldf old *.sdf Project Import

*.sty Strategie File.
To do: Diamond 2.x install
       LCMXO2-1200ZE
module
Default_w_standby_t1top // : Default_w_standby_t1top (-- )
(
s_stdby_in,// #"69"
stdby1,    // #"38"
oosc_clk,  // #"40"
led0       // #"97"
 );       //, led1_o);

input  s_stdby_in ;

output  stdby1, oosc_clk,     // ;

// output
led0; //, led1_o;
 //                                    oosc_clk#40
 assign led1_o = s_stdby_in ? 1'b1 : ~ oosc_clk;
 // >><<<<<<<<<<<<
 //wire led1_o = osc_clk; ///* WIRE

// osc_clk
wire  stby_flag ;

reg  [20:0] cnt ;
/// assign clkout = clki ;

/// assign rstout = rstn ;
always @ (posedge oosc_clk or posedge s_stdby_in) begin
  begin : do_20bit_pp
    if (s_stdby_in) //begin : work_LED_20_bit
    cnt <= 0;
    //end
  else
      cnt <= (cnt + 1);
  end
end
///* last assign wishes !!!
assign led0 = s_stdby_in ? 1'b1 : cnt[20];
//

// Internal Oscillator STUFF
  defparam OSCH_inst_1.NOM_FREQ = "2.08";  ///*  This is the "default" 
frequency !
OSCH // create>
    OSCH_inst_1( .STDBY(stdby1 ),     // 0=Enabled, 1=Disabled also 
Disabled with Bandgap=OFF
                 .OSC(oosc_clk),
                 .SEDSTDBY(/*empty_1*/) );    //  this signal is not 
required if not using SED - see TN1199 for more details.

pwr_cntrllr
     pcm1 ( .USERSTDBY( s_stdby_in ),
   .CLRFLAG(stby_flag ),
   .CFGSTDBY( 1'b0 ), //
   .STDBY( stdby1 ),
   .SFLAG( stby_flag ) );

      endmodule

von Holger (Gast)


Lesenswert?

DUT outputs are Wires
    input are regs.
*.lpf = Xilinx *.ucf
// Beitrag "CPLD PROJECT MANAGER CLUSTER GRID"
// Wie mache ich z.B eine LED_0[Vector] Group I/O []
// ALTERA DE1 FPGA board
// Ben Krasnow
########################################################
BLOCK RESETPATHS ;
BLOCK ASYNCPATHS ;
FREQUENCY NET "oosc_clk_inferred_clock" 2.080000 MHz ;
BANK 0 VCCIO 3.3 V;
BANK 1 VCCIO 3.3 V;
BANK 2 VCCIO 3.3 V;
BANK 3 VCCIO 3.3 V;
IOBUF ALLPORTS IO_TYPE=LVCMOS33 ;
LOCATE COMP "oosc_clk" SITE "40" ;##
LOCATE COMP "s_stdby_in" SITE "69" ;
LOCATE COMP "stdby1" SITE "38" ;
#
LOCATE COMP "led0" SITE "97" ;
LOCATE COMP "led1_o" SITE "98" ;
#LOCATE COMP "led2" SITE "99" ;
#LOCATE COMP "led3" SITE "100" ;
#LOCATE COMP "led4" SITE "104" ;
#LOCATE COMP "led5" SITE "105" ;
#LOCATE COMP "led6" SITE "106" ;
#LOCATE COMP "led7" SITE "107" ;
IOBUF PORT "s_stdby_in" IO_TYPE=LVCMOS33 HYSTERESIS=SMALL PULLMODE=UP ;
IOBUF PORT "stdby1" IO_TYPE=LVCMOS33 PULLMODE=UP ;
IOBUF PORT "oosc_clk" IO_TYPE=LVCMOS33 PULLMODE=UP ;
IOBUF PORT "led0" IO_TYPE=LVCMOS33 PULLMODE=UP ;
USE PRIMARY NET "oosc_clk_inferred_clock" ;
USE SECONDARY NET "s_stdby_in_c" ;

##################################################################
// ?? Holg. stuff use lib Machxo2 all
`timescale 1 ns / 1 ps
module pwr_cntrllr (USERSTDBY, CLRFLAG, CFGSTDBY, STDBY, SFLAG);
    // wire i/o Port declarations

  input  wire USERSTDBY;
    input  wire CLRFLAG;
    input  wire CFGSTDBY;
    output wire STDBY;
    output wire SFLAG;
///* < (#)WIRE >
    wire w_scuba_vlo; // WIRE

    VLO // create#1>
    scuba_vlo_inst (.Z(w_scuba_vlo));

    defparam PCNTR_Inst0.BGOFF =     "TRUE" ;
    defparam PCNTR_Inst0.POROFF =    "TRUE" ;
    defparam PCNTR_Inst0.WAKEUP =      "USER" ;
    defparam PCNTR_Inst0.TIMEOUT =     "BYPASS" ;
    defparam PCNTR_Inst0.STDBYOPT =    "USER_CFG" ;//??
    PCNTR // create#2>
    PCNTR_Inst0 (.CLK(w_scuba_vlo),
                 .USERTIMEOUT(w_scuba_vlo),
                 .USERSTDBY(USERSTDBY),
                 .CLRFLAG(CLRFLAG),
                 .CFGWAKE(w_scuba_vlo),
                 .CFGSTDBY(CFGSTDBY),
                 .STDBY(STDBY),
        .STOP(/*EMPTY*/), .SFLAG(SFLAG));



    // exemplar begin
    // exemplar end

endmodule

von Holger (Gast)


Lesenswert?

///* Strategie damit das auch bei  2 modulen via
Veriog geht:

Project main_prj.xx
Altera Design main_top.v = Verilog File
module inside VERILOG File is a module main_t_top_1
Hint:
Diamond Tool make a Top Module.
via *.lpf File --like *.ucf in Xilinx
-------------------------------------------
http://www.youtube.com/watch?v=If4iiz4I8Vk
KEY[0]
KEY[1]
------- Create> Vector NODES ----------------------
Konduction ueber Bus Bundel.
Nios aufsetzen.
Beitrag "NiosII Manuell aufsetzen"
Gruss Holger

von Holger (Gast)


Lesenswert?

1
// File: default_w_standby_top.v
2
// Letzter Stand: 24.12.2012 
3
module ///* Module-DEFINITIONS : Default_w_standby_top.v ( a_5 i/o Ports -- )
4
Default_w_standby_t1top // 
5
(              // Pinning: 
6
s_stdby_in,    // #"69" 
7
stand_by_1,    // #"38" 
8
oosc_clk,      // #"40" 
9
led0,          // #"97"
10
sram_addr_1    // #"100"
11
 ); 
12
///*in_Inp: <<
13
input  s_stdby_in ;
14
///*o_OUTp:>>======================
15
output  stand_by_1; 
16
output  oosc_clk; 
17
output  led0; 
18
output  sram_addr_1; 
19
//###########################################################
20
 //                                    oosc_clk#40  
21
    // via *.UCF *.lpf -->user constraint> bingo. 
22
   assign led1_o   = s_stdby_in ? 1'b1 : ~ oosc_clk; //  
23
   // Bus-phi--Out to z.B atmega8 Chip 
24
 ///* 1 last <<< assign wish !!! 
25
 
26
 
27
 // assign sram_addr_1 = s_stdby_in ? 1'b1 :   oosc_clk;
28
 // >><<<<<<<<<<<<
29
 //wire led1_o = osc_clk; ///* WIRE 
30
31
// osc_clk
32
wire w_STAND_BY_FLAG_1  = s_stdby_in; // ???? 
33
// To do:
34
/// assign clkout = clki ;
35
/// assign rstout = rstn ;
36
// need a Register 
37
reg  [21:0] cnt ; // work reg. 
38
// LED via "CLK_en Taster" als int.Chip_Clock Tester 
39
// Achtung: Der Bus an SPI,IC2 ist damit auch totgelegt. 
40
always @ (posedge oosc_clk or posedge s_stdby_in) begin // 
41
  begin : do_20bit_pp
42
    if (s_stdby_in) //begin : work_LED_20_bit  
43
    cnt <= 0;  
44
    //end 
45
  else  
46
      cnt <= (cnt + 1); // Increment 
47
  end        
48
end 
49
///* 3 last assign wishes !!! 
50
assign sram_addr_1 = ~ cnt[20];  
51
assign sram_addr_0 =   cnt[20];
52
assign led0 = s_stdby_in ? 1'b1 : cnt[20];
53
// Also mit TAB am Ende endmodule 
54
//==============================================================================================
55
// Das ist der eingebaute interne Ring-Oszi. MachXO2 
56
///* Internal Oscillator oscH-<> harness 'STUFF !!!
57
  defparam OSCH_inst_1.NOM_FREQ = "2.08";  ///*  This is the "default" frequency ! 
58
OSCH ///*create_(1)> 
59
    OSCH_inst_1( .STDBY(stand_by_1 ), // 0=Enabled, 1=Disabled also Disabled with Bandgap=OFF
60
                 .OSC( oosc_clk),
61
                 .SEDSTDBY(/*SEDSTDBY*/ /*empty_1*/) );  
62
         //  this signal is not required if not using SED - see TN1199 for more details.
63
//===============================================================================================
64
pwr_cntrllr ///*create_(2)> 
65
     pcm1 ( .USERSTDBY( s_stdby_in ),
66
   .CLRFLAG( w_STAND_BY_FLAG_1 ),    // via wire flag
67
   .CFGSTDBY( 1'b0 ), // NULL via CFG 
68
   .STDBY( stand_by_1 ), // 
69
   .SFLAG( w_STAND_BY_FLAG_1 )      // via wire flag
70
     ); // 
71
     //##############################################
72
   
73
      endmodule 
74
      // 
75
      // http://www.asic-world.com/examples/verilog/uart.html

von Holger (Gast)


Lesenswert?

Diamond Reveal Hardware Debugger
https://www.youtube.com/watch?v=OXxxLRRQmQ4&list=UU5Vv9B2edWD5x57B7mvUDXg&index=20
Damit werde ich mich noch befassen.


Hiracical Browser habe ich bei Lattice Diamond,
Source of  signal map, Load of signal .
Der findet somit das Signal via Browse go to Source Code.
Aber das Code Patata Tool bringt da noch mehr.
Ähnlich wie das Sigasi Tool.

Vielleicht wäre das HDL Code Analyse
Tool Kit eine Option  für Dich?

Gruss Holger.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.