From e240bfd1188dc27e3f1353af035255fea5057271 Mon Sep 17 00:00:00 2001 From: Florian HUYNH <f22huynh@vl-tp-br-022.imta.fr> Date: Wed, 12 Feb 2025 14:44:08 +0100 Subject: [PATCH] Session 1 : ajout des fichier sources --- .../imports/src/Nexys4DDR-Master.xdc | 265 ++++++++++++++++++ src_copy/sim_1/imports/src/loto_tb.vhd | 94 +++++++ src_copy/sources_1/imports/src/automate.vhd | 136 +++++++++ .../sources_1/imports/src/compteur1_49.vhd | 40 +++ .../imports/src/compteur_modulo4.vhd | 69 +++++ .../imports/src/compteur_modulo6.vhd | 42 +++ .../imports/src/compteur_modulo6_tb.vhd | 57 ++++ .../sources_1/imports/src/compteur_valid.vhd | 39 +++ .../sources_1/imports/src/diviseur_freq.vhd | 36 +++ src_copy/sources_1/imports/src/led_pwm.vhd | 39 +++ src_copy/sources_1/imports/src/loto.vhd | 192 +++++++++++++ src_copy/sources_1/imports/src/modulo4.vhd | 51 ++++ src_copy/sources_1/imports/src/mux6_1.vhd | 47 ++++ src_copy/sources_1/imports/src/mux6_1_tb.vhd | 79 ++++++ src_copy/sources_1/imports/src/registres.vhd | 64 +++++ src_copy/sources_1/imports/src/tirage.vhd | 190 +++++++++++++ .../imports/src/transcodeur7s_d_u.vhd | 95 +++++++ .../sources_1/imports/src/transcodeur7s_u.vhd | 63 +++++ src_copy/utils_1/imports/synth_1/loto.dcp | Bin 0 -> 43451 bytes 19 files changed, 1598 insertions(+) create mode 100644 src_copy/constrs_1/imports/src/Nexys4DDR-Master.xdc create mode 100644 src_copy/sim_1/imports/src/loto_tb.vhd create mode 100644 src_copy/sources_1/imports/src/automate.vhd create mode 100644 src_copy/sources_1/imports/src/compteur1_49.vhd create mode 100644 src_copy/sources_1/imports/src/compteur_modulo4.vhd create mode 100644 src_copy/sources_1/imports/src/compteur_modulo6.vhd create mode 100644 src_copy/sources_1/imports/src/compteur_modulo6_tb.vhd create mode 100644 src_copy/sources_1/imports/src/compteur_valid.vhd create mode 100644 src_copy/sources_1/imports/src/diviseur_freq.vhd create mode 100644 src_copy/sources_1/imports/src/led_pwm.vhd create mode 100644 src_copy/sources_1/imports/src/loto.vhd create mode 100644 src_copy/sources_1/imports/src/modulo4.vhd create mode 100644 src_copy/sources_1/imports/src/mux6_1.vhd create mode 100644 src_copy/sources_1/imports/src/mux6_1_tb.vhd create mode 100644 src_copy/sources_1/imports/src/registres.vhd create mode 100644 src_copy/sources_1/imports/src/tirage.vhd create mode 100644 src_copy/sources_1/imports/src/transcodeur7s_d_u.vhd create mode 100644 src_copy/sources_1/imports/src/transcodeur7s_u.vhd create mode 100755 src_copy/utils_1/imports/synth_1/loto.dcp diff --git a/src_copy/constrs_1/imports/src/Nexys4DDR-Master.xdc b/src_copy/constrs_1/imports/src/Nexys4DDR-Master.xdc new file mode 100644 index 0000000..c94f376 --- /dev/null +++ b/src_copy/constrs_1/imports/src/Nexys4DDR-Master.xdc @@ -0,0 +1,265 @@ +## This file is a general .xdc for the Nexys4 DDR Rev. C +## To use it in a project: +## - uncomment the lines corresponding to used pins +## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project + +## Clock signal +set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports { I_clk_100m }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz +create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {I_clk_100m}]; + + +##Switches + +#set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { SW[0] }]; #IO_L24N_T3_RS0_15 Sch=sw[0] +#set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { SW[1] }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1] +#set_property -dict { PACKAGE_PIN M13 IOSTANDARD LVCMOS33 } [get_ports { SW[2] }]; #IO_L6N_T0_D08_VREF_14 Sch=sw[2] +#set_property -dict { PACKAGE_PIN R15 IOSTANDARD LVCMOS33 } [get_ports { SW[3] }]; #IO_L13N_T2_MRCC_14 Sch=sw[3] +#set_property -dict { PACKAGE_PIN R17 IOSTANDARD LVCMOS33 } [get_ports { SW[4] }]; #IO_L12N_T1_MRCC_14 Sch=sw[4] +#set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33 } [get_ports { SW[5] }]; #IO_L7N_T1_D10_14 Sch=sw[5] +#set_property -dict { PACKAGE_PIN U18 IOSTANDARD LVCMOS33 } [get_ports { SW[6] }]; #IO_L17N_T2_A13_D29_14 Sch=sw[6] +#set_property -dict { PACKAGE_PIN R13 IOSTANDARD LVCMOS33 } [get_ports { SW[7] }]; #IO_L5N_T0_D07_14 Sch=sw[7] +#set_property -dict { PACKAGE_PIN T8 IOSTANDARD LVCMOS18 } [get_ports { SW[8] }]; #IO_L24N_T3_34 Sch=sw[8] +#set_property -dict { PACKAGE_PIN U8 IOSTANDARD LVCMOS18 } [get_ports { SW[9] }]; #IO_25_34 Sch=sw[9] +#set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports { SW[10] }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=sw[10] +#set_property -dict { PACKAGE_PIN T13 IOSTANDARD LVCMOS33 } [get_ports { SW[11] }]; #IO_L23P_T3_A03_D19_14 Sch=sw[11] +#set_property -dict { PACKAGE_PIN H6 IOSTANDARD LVCMOS33 } [get_ports { SW[12] }]; #IO_L24P_T3_35 Sch=sw[12] +#set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports { SW[13] }]; #IO_L20P_T3_A08_D24_14 Sch=sw[13] +#set_property -dict { PACKAGE_PIN U11 IOSTANDARD LVCMOS33 } [get_ports { SW[14] }]; #IO_L19N_T3_A09_D25_VREF_14 Sch=sw[14] +set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS33 } [get_ports { I_block }]; #IO_L21P_T3_DQS_14 Sch=sw[15] + + +## LEDs + +#set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports { LED[0] }]; #IO_L18P_T2_A24_15 Sch=led[0] +#set_property -dict { PACKAGE_PIN K15 IOSTANDARD LVCMOS33 } [get_ports { LED[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1] +#set_property -dict { PACKAGE_PIN J13 IOSTANDARD LVCMOS33 } [get_ports { LED[2] }]; #IO_L17N_T2_A25_15 Sch=led[2] +#set_property -dict { PACKAGE_PIN N14 IOSTANDARD LVCMOS33 } [get_ports { LED[3] }]; #IO_L8P_T1_D11_14 Sch=led[3] +#set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 } [get_ports { LED[4] }]; #IO_L7P_T1_D09_14 Sch=led[4] +#set_property -dict { PACKAGE_PIN V17 IOSTANDARD LVCMOS33 } [get_ports { LED[5] }]; #IO_L18N_T2_A11_D27_14 Sch=led[5] +#set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { LED[6] }]; #IO_L17P_T2_A14_D30_14 Sch=led[6] +#set_property -dict { PACKAGE_PIN U16 IOSTANDARD LVCMOS33 } [get_ports { LED[7] }]; #IO_L18P_T2_A12_D28_14 Sch=led[7] +#set_property -dict { PACKAGE_PIN V16 IOSTANDARD LVCMOS33 } [get_ports { LED[8] }]; #IO_L16N_T2_A15_D31_14 Sch=led[8] +#set_property -dict { PACKAGE_PIN T15 IOSTANDARD LVCMOS33 } [get_ports { LED[9] }]; #IO_L14N_T2_SRCC_14 Sch=led[9] +#set_property -dict { PACKAGE_PIN U14 IOSTANDARD LVCMOS33 } [get_ports { LED[10] }]; #IO_L22P_T3_A05_D21_14 Sch=led[10] +#set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS33 } [get_ports { LED[11] }]; #IO_L15N_T2_DQS_DOUT_CSO_B_14 Sch=led[11] +#set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS33 } [get_ports { LED[12] }]; #IO_L16P_T2_CSI_B_14 Sch=led[12] +#set_property -dict { PACKAGE_PIN V14 IOSTANDARD LVCMOS33 } [get_ports { LED[13] }]; #IO_L22N_T3_A04_D20_14 Sch=led[13] +#set_property -dict { PACKAGE_PIN V12 IOSTANDARD LVCMOS33 } [get_ports { LED[14] }]; #IO_L20N_T3_A07_D23_14 Sch=led[14] +#set_property -dict { PACKAGE_PIN V11 IOSTANDARD LVCMOS33 } [get_ports { LED[15] }]; #IO_L21N_T3_DQS_A06_D22_14 Sch=led[15] + +#set_property -dict { PACKAGE_PIN R12 IOSTANDARD LVCMOS33 } [get_ports { LED16_B }]; #IO_L5P_T0_D06_14 Sch=led16_b +#set_property -dict { PACKAGE_PIN M16 IOSTANDARD LVCMOS33 } [get_ports { LED16_G }]; #IO_L10P_T1_D14_14 Sch=led16_g +set_property -dict { PACKAGE_PIN N15 IOSTANDARD LVCMOS33 } [get_ports { O_red }]; #IO_L11P_T1_SRCC_14 Sch=led16_r +#set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { LED17_B }]; #IO_L15N_T2_DQS_ADV_B_15 Sch=led17_b +set_property -dict { PACKAGE_PIN R11 IOSTANDARD LVCMOS33 } [get_ports { O_green }]; #IO_0_14 Sch=led17_g +#set_property -dict { PACKAGE_PIN N16 IOSTANDARD LVCMOS33 } [get_ports { LED17_R }]; #IO_L11N_T1_SRCC_14 Sch=led17_r + + +##7 segment display + +set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[0] }]; #IO_L24N_T3_A00_D16_14 Sch=ca +set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[1] }]; #IO_25_14 Sch=cb +set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[2] }]; #IO_25_15 Sch=cc +set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[3] }]; #IO_L17P_T2_A26_15 Sch=cd +set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[4] }]; #IO_L13P_T2_MRCC_14 Sch=ce +set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[5] }]; #IO_L19P_T3_A10_D26_14 Sch=cf +set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentDisplay[6] }]; #IO_L4P_T0_D04_14 Sch=cg + +#set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { DP }]; #IO_L19N_T3_A21_VREF_15 Sch=dp + +set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] +set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] +set_property -dict { PACKAGE_PIN T9 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[2] }]; #IO_L24P_T3_A01_D17_14 Sch=an[2] +set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[3] }]; #IO_L19P_T3_A22_15 Sch=an[3] +set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[4] }]; #IO_L8N_T1_D12_14 Sch=an[4] +set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[5] }]; #IO_L14P_T2_SRCC_14 Sch=an[5] +set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[6] }]; #IO_L23P_T3_35 Sch=an[6] +set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports { O_7segmentSelect[7] }]; #IO_L23N_T3_A02_D18_14 Sch=an[7] + + +##Buttons + +#set_property -dict { PACKAGE_PIN C12 IOSTANDARD LVCMOS33 } [get_ports { CPU_RESETN }]; #IO_L3P_T0_DQS_AD1P_15 Sch=cpu_resetn + +set_property -dict { PACKAGE_PIN N17 IOSTANDARD LVCMOS33 } [get_ports { I_button }]; #IO_L9P_T1_DQS_14 Sch=btnc +#set_property -dict { PACKAGE_PIN M18 IOSTANDARD LVCMOS33 } [get_ports { BTNU }]; #IO_L4N_T0_D05_14 Sch=btnu +#set_property -dict { PACKAGE_PIN P17 IOSTANDARD LVCMOS33 } [get_ports { BTNL }]; #IO_L12P_T1_MRCC_14 Sch=btnl +#set_property -dict { PACKAGE_PIN M17 IOSTANDARD LVCMOS33 } [get_ports { BTNR }]; #IO_L10N_T1_D15_14 Sch=btnr +set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports { I_rst }]; #IO_L9N_T1_DQS_D13_14 Sch=btnd + + +##Pmod Headers + + +##Pmod Header JA + +#set_property -dict { PACKAGE_PIN C17 IOSTANDARD LVCMOS33 } [get_ports { JA[1] }]; #IO_L20N_T3_A19_15 Sch=ja[1] +#set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { JA[2] }]; #IO_L21N_T3_DQS_A18_15 Sch=ja[2] +#set_property -dict { PACKAGE_PIN E18 IOSTANDARD LVCMOS33 } [get_ports { JA[3] }]; #IO_L21P_T3_DQS_15 Sch=ja[3] +#set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports { JA[4] }]; #IO_L18N_T2_A23_15 Sch=ja[4] +#set_property -dict { PACKAGE_PIN D17 IOSTANDARD LVCMOS33 } [get_ports { JA[7] }]; #IO_L16N_T2_A27_15 Sch=ja[7] +#set_property -dict { PACKAGE_PIN E17 IOSTANDARD LVCMOS33 } [get_ports { JA[8] }]; #IO_L16P_T2_A28_15 Sch=ja[8] +#set_property -dict { PACKAGE_PIN F18 IOSTANDARD LVCMOS33 } [get_ports { JA[9] }]; #IO_L22N_T3_A16_15 Sch=ja[9] +#set_property -dict { PACKAGE_PIN G18 IOSTANDARD LVCMOS33 } [get_ports { JA[10] }]; #IO_L22P_T3_A17_15 Sch=ja[10] + + +##Pmod Header JB + +#set_property -dict { PACKAGE_PIN D14 IOSTANDARD LVCMOS33 } [get_ports { JB[1] }]; #IO_L1P_T0_AD0P_15 Sch=jb[1] +#set_property -dict { PACKAGE_PIN F16 IOSTANDARD LVCMOS33 } [get_ports { JB[2] }]; #IO_L14N_T2_SRCC_15 Sch=jb[2] +#set_property -dict { PACKAGE_PIN G16 IOSTANDARD LVCMOS33 } [get_ports { JB[3] }]; #IO_L13N_T2_MRCC_15 Sch=jb[3] +#set_property -dict { PACKAGE_PIN H14 IOSTANDARD LVCMOS33 } [get_ports { JB[4] }]; #IO_L15P_T2_DQS_15 Sch=jb[4] +#set_property -dict { PACKAGE_PIN E16 IOSTANDARD LVCMOS33 } [get_ports { JB[7] }]; #IO_L11N_T1_SRCC_15 Sch=jb[7] +#set_property -dict { PACKAGE_PIN F13 IOSTANDARD LVCMOS33 } [get_ports { JB[8] }]; #IO_L5P_T0_AD9P_15 Sch=jb[8] +#set_property -dict { PACKAGE_PIN G13 IOSTANDARD LVCMOS33 } [get_ports { JB[9] }]; #IO_0_15 Sch=jb[9] +#set_property -dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 } [get_ports { JB[10] }]; #IO_L13P_T2_MRCC_15 Sch=jb[10] + + +##Pmod Header JC + +#set_property -dict { PACKAGE_PIN K1 IOSTANDARD LVCMOS33 } [get_ports { JC[1] }]; #IO_L23N_T3_35 Sch=jc[1] +#set_property -dict { PACKAGE_PIN F6 IOSTANDARD LVCMOS33 } [get_ports { JC[2] }]; #IO_L19N_T3_VREF_35 Sch=jc[2] +#set_property -dict { PACKAGE_PIN J2 IOSTANDARD LVCMOS33 } [get_ports { JC[3] }]; #IO_L22N_T3_35 Sch=jc[3] +#set_property -dict { PACKAGE_PIN G6 IOSTANDARD LVCMOS33 } [get_ports { JC[4] }]; #IO_L19P_T3_35 Sch=jc[4] +#set_property -dict { PACKAGE_PIN E7 IOSTANDARD LVCMOS33 } [get_ports { JC[7] }]; #IO_L6P_T0_35 Sch=jc[7] +#set_property -dict { PACKAGE_PIN J3 IOSTANDARD LVCMOS33 } [get_ports { JC[8] }]; #IO_L22P_T3_35 Sch=jc[8] +#set_property -dict { PACKAGE_PIN J4 IOSTANDARD LVCMOS33 } [get_ports { JC[9] }]; #IO_L21P_T3_DQS_35 Sch=jc[9] +#set_property -dict { PACKAGE_PIN E6 IOSTANDARD LVCMOS33 } [get_ports { JC[10] }]; #IO_L5P_T0_AD13P_35 Sch=jc[10] + + +##Pmod Header JD + +#set_property -dict { PACKAGE_PIN H4 IOSTANDARD LVCMOS33 } [get_ports { JD[1] }]; #IO_L21N_T3_DQS_35 Sch=jd[1] +#set_property -dict { PACKAGE_PIN H1 IOSTANDARD LVCMOS33 } [get_ports { JD[2] }]; #IO_L17P_T2_35 Sch=jd[2] +#set_property -dict { PACKAGE_PIN G1 IOSTANDARD LVCMOS33 } [get_ports { JD[3] }]; #IO_L17N_T2_35 Sch=jd[3] +#set_property -dict { PACKAGE_PIN G3 IOSTANDARD LVCMOS33 } [get_ports { JD[4] }]; #IO_L20N_T3_35 Sch=jd[4] +#set_property -dict { PACKAGE_PIN H2 IOSTANDARD LVCMOS33 } [get_ports { JD[7] }]; #IO_L15P_T2_DQS_35 Sch=jd[7] +#set_property -dict { PACKAGE_PIN G4 IOSTANDARD LVCMOS33 } [get_ports { JD[8] }]; #IO_L20P_T3_35 Sch=jd[8] +#set_property -dict { PACKAGE_PIN G2 IOSTANDARD LVCMOS33 } [get_ports { JD[9] }]; #IO_L15N_T2_DQS_35 Sch=jd[9] +#set_property -dict { PACKAGE_PIN F3 IOSTANDARD LVCMOS33 } [get_ports { JD[10] }]; #IO_L13N_T2_MRCC_35 Sch=jd[10] + + +##Pmod Header JXADC + +#set_property -dict { PACKAGE_PIN A14 IOSTANDARD LVDS } [get_ports { XA_N[1] }]; #IO_L9N_T1_DQS_AD3N_15 Sch=xa_n[1] +#set_property -dict { PACKAGE_PIN A13 IOSTANDARD LVDS } [get_ports { XA_P[1] }]; #IO_L9P_T1_DQS_AD3P_15 Sch=xa_p[1] +#set_property -dict { PACKAGE_PIN A16 IOSTANDARD LVDS } [get_ports { XA_N[2] }]; #IO_L8N_T1_AD10N_15 Sch=xa_n[2] +#set_property -dict { PACKAGE_PIN A15 IOSTANDARD LVDS } [get_ports { XA_P[2] }]; #IO_L8P_T1_AD10P_15 Sch=xa_p[2] +#set_property -dict { PACKAGE_PIN B17 IOSTANDARD LVDS } [get_ports { XA_N[3] }]; #IO_L7N_T1_AD2N_15 Sch=xa_n[3] +#set_property -dict { PACKAGE_PIN B16 IOSTANDARD LVDS } [get_ports { XA_P[3] }]; #IO_L7P_T1_AD2P_15 Sch=xa_p[3] +#set_property -dict { PACKAGE_PIN A18 IOSTANDARD LVDS } [get_ports { XA_N[4] }]; #IO_L10N_T1_AD11N_15 Sch=xa_n[4] +#set_property -dict { PACKAGE_PIN B18 IOSTANDARD LVDS } [get_ports { XA_P[4] }]; #IO_L10P_T1_AD11P_15 Sch=xa_p[4] + + +##VGA Connector + +#set_property -dict { PACKAGE_PIN A3 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[0] }]; #IO_L8N_T1_AD14N_35 Sch=vga_r[0] +#set_property -dict { PACKAGE_PIN B4 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[1] }]; #IO_L7N_T1_AD6N_35 Sch=vga_r[1] +#set_property -dict { PACKAGE_PIN C5 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[2] }]; #IO_L1N_T0_AD4N_35 Sch=vga_r[2] +#set_property -dict { PACKAGE_PIN A4 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[3] }]; #IO_L8P_T1_AD14P_35 Sch=vga_r[3] + +#set_property -dict { PACKAGE_PIN C6 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[0] }]; #IO_L1P_T0_AD4P_35 Sch=vga_g[0] +#set_property -dict { PACKAGE_PIN A5 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[1] }]; #IO_L3N_T0_DQS_AD5N_35 Sch=vga_g[1] +#set_property -dict { PACKAGE_PIN B6 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[2] }]; #IO_L2N_T0_AD12N_35 Sch=vga_g[2] +#set_property -dict { PACKAGE_PIN A6 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[3] }]; #IO_L3P_T0_DQS_AD5P_35 Sch=vga_g[3] + +#set_property -dict { PACKAGE_PIN B7 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[0] }]; #IO_L2P_T0_AD12P_35 Sch=vga_b[0] +#set_property -dict { PACKAGE_PIN C7 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[1] }]; #IO_L4N_T0_35 Sch=vga_b[1] +#set_property -dict { PACKAGE_PIN D7 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[2] }]; #IO_L6N_T0_VREF_35 Sch=vga_b[2] +#set_property -dict { PACKAGE_PIN D8 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[3] }]; #IO_L4P_T0_35 Sch=vga_b[3] + +#set_property -dict { PACKAGE_PIN B11 IOSTANDARD LVCMOS33 } [get_ports { VGA_HS }]; #IO_L4P_T0_15 Sch=vga_hs +#set_property -dict { PACKAGE_PIN B12 IOSTANDARD LVCMOS33 } [get_ports { VGA_VS }]; #IO_L3N_T0_DQS_AD1N_15 Sch=vga_vs + + +##Micro SD Connector + +#set_property -dict { PACKAGE_PIN E2 IOSTANDARD LVCMOS33 } [get_ports { SD_RESET }]; #IO_L14P_T2_SRCC_35 Sch=sd_reset +#set_property -dict { PACKAGE_PIN A1 IOSTANDARD LVCMOS33 } [get_ports { SD_CD }]; #IO_L9N_T1_DQS_AD7N_35 Sch=sd_cd +#set_property -dict { PACKAGE_PIN B1 IOSTANDARD LVCMOS33 } [get_ports { SD_SCK }]; #IO_L9P_T1_DQS_AD7P_35 Sch=sd_sck +#set_property -dict { PACKAGE_PIN C1 IOSTANDARD LVCMOS33 } [get_ports { SD_CMD }]; #IO_L16N_T2_35 Sch=sd_cmd +#set_property -dict { PACKAGE_PIN C2 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[0] }]; #IO_L16P_T2_35 Sch=sd_dat[0] +#set_property -dict { PACKAGE_PIN E1 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[1] }]; #IO_L18N_T2_35 Sch=sd_dat[1] +#set_property -dict { PACKAGE_PIN F1 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[2] }]; #IO_L18P_T2_35 Sch=sd_dat[2] +#set_property -dict { PACKAGE_PIN D2 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[3] }]; #IO_L14N_T2_SRCC_35 Sch=sd_dat[3] + + +##Accelerometer + +#set_property -dict { PACKAGE_PIN E15 IOSTANDARD LVCMOS33 } [get_ports { ACL_MISO }]; #IO_L11P_T1_SRCC_15 Sch=acl_miso +#set_property -dict { PACKAGE_PIN F14 IOSTANDARD LVCMOS33 } [get_ports { ACL_MOSI }]; #IO_L5N_T0_AD9N_15 Sch=acl_mosi +#set_property -dict { PACKAGE_PIN F15 IOSTANDARD LVCMOS33 } [get_ports { ACL_SCLK }]; #IO_L14P_T2_SRCC_15 Sch=acl_sclk +#set_property -dict { PACKAGE_PIN D15 IOSTANDARD LVCMOS33 } [get_ports { ACL_CSN }]; #IO_L12P_T1_MRCC_15 Sch=acl_csn +#set_property -dict { PACKAGE_PIN B13 IOSTANDARD LVCMOS33 } [get_ports { ACL_INT[1] }]; #IO_L2P_T0_AD8P_15 Sch=acl_int[1] +#set_property -dict { PACKAGE_PIN C16 IOSTANDARD LVCMOS33 } [get_ports { ACL_INT[2] }]; #IO_L20P_T3_A20_15 Sch=acl_int[2] + + +##Temperature Sensor + +#set_property -dict { PACKAGE_PIN C14 IOSTANDARD LVCMOS33 } [get_ports { TMP_SCL }]; #IO_L1N_T0_AD0N_15 Sch=tmp_scl +#set_property -dict { PACKAGE_PIN C15 IOSTANDARD LVCMOS33 } [get_ports { TMP_SDA }]; #IO_L12N_T1_MRCC_15 Sch=tmp_sda +#set_property -dict { PACKAGE_PIN D13 IOSTANDARD LVCMOS33 } [get_ports { TMP_INT }]; #IO_L6N_T0_VREF_15 Sch=tmp_int +#set_property -dict { PACKAGE_PIN B14 IOSTANDARD LVCMOS33 } [get_ports { TMP_CT }]; #IO_L2N_T0_AD8N_15 Sch=tmp_ct + +##Omnidirectional Microphone + +#set_property -dict { PACKAGE_PIN J5 IOSTANDARD LVCMOS33 } [get_ports { M_CLK }]; #IO_25_35 Sch=m_clk +#set_property -dict { PACKAGE_PIN H5 IOSTANDARD LVCMOS33 } [get_ports { M_DATA }]; #IO_L24N_T3_35 Sch=m_data +#set_property -dict { PACKAGE_PIN F5 IOSTANDARD LVCMOS33 } [get_ports { M_LRSEL }]; #IO_0_35 Sch=m_lrsel + + +##PWM Audio Amplifier + +#set_property -dict { PACKAGE_PIN A11 IOSTANDARD LVCMOS33 } [get_ports { AUD_PWM }]; #IO_L4N_T0_15 Sch=aud_pwm +#set_property -dict { PACKAGE_PIN D12 IOSTANDARD LVCMOS33 } [get_ports { AUD_SD }]; #IO_L6P_T0_15 Sch=aud_sd + + +##USB-RS232 Interface + +#set_property -dict { PACKAGE_PIN C4 IOSTANDARD LVCMOS33 } [get_ports { UART_TXD_IN }]; #IO_L7P_T1_AD6P_35 Sch=uart_txd_in +#set_property -dict { PACKAGE_PIN D4 IOSTANDARD LVCMOS33 } [get_ports { UART_RXD_OUT }]; #IO_L11N_T1_SRCC_35 Sch=uart_rxd_out +#set_property -dict { PACKAGE_PIN D3 IOSTANDARD LVCMOS33 } [get_ports { UART_CTS }]; #IO_L12N_T1_MRCC_35 Sch=uart_cts +#set_property -dict { PACKAGE_PIN E5 IOSTANDARD LVCMOS33 } [get_ports { UART_RTS }]; #IO_L5N_T0_AD13N_35 Sch=uart_rts + +##USB HID (PS/2) + +#set_property -dict { PACKAGE_PIN F4 IOSTANDARD LVCMOS33 } [get_ports { PS2_CLK }]; #IO_L13P_T2_MRCC_35 Sch=ps2_clk +#set_property -dict { PACKAGE_PIN B2 IOSTANDARD LVCMOS33 } [get_ports { PS2_DATA }]; #IO_L10N_T1_AD15N_35 Sch=ps2_data + + +##SMSC Ethernet PHY + +#set_property -dict { PACKAGE_PIN C9 IOSTANDARD LVCMOS33 } [get_ports { ETH_MDC }]; #IO_L11P_T1_SRCC_16 Sch=eth_mdc +#set_property -dict { PACKAGE_PIN A9 IOSTANDARD LVCMOS33 } [get_ports { ETH_MDIO }]; #IO_L14N_T2_SRCC_16 Sch=eth_mdio +#set_property -dict { PACKAGE_PIN B3 IOSTANDARD LVCMOS33 } [get_ports { ETH_RSTN }]; #IO_L10P_T1_AD15P_35 Sch=eth_rstn +#set_property -dict { PACKAGE_PIN D9 IOSTANDARD LVCMOS33 } [get_ports { ETH_CRSDV }]; #IO_L6N_T0_VREF_16 Sch=eth_crsdv +#set_property -dict { PACKAGE_PIN C10 IOSTANDARD LVCMOS33 } [get_ports { ETH_RXERR }]; #IO_L13N_T2_MRCC_16 Sch=eth_rxerr +#set_property -dict { PACKAGE_PIN C11 IOSTANDARD LVCMOS33 } [get_ports { ETH_RXD[0] }]; #IO_L13P_T2_MRCC_16 Sch=eth_rxd[0] +#set_property -dict { PACKAGE_PIN D10 IOSTANDARD LVCMOS33 } [get_ports { ETH_RXD[1] }]; #IO_L19N_T3_VREF_16 Sch=eth_rxd[1] +#set_property -dict { PACKAGE_PIN B9 IOSTANDARD LVCMOS33 } [get_ports { ETH_TXEN }]; #IO_L11N_T1_SRCC_16 Sch=eth_txen +#set_property -dict { PACKAGE_PIN A10 IOSTANDARD LVCMOS33 } [get_ports { ETH_TXD[0] }]; #IO_L14P_T2_SRCC_16 Sch=eth_txd[0] +#set_property -dict { PACKAGE_PIN A8 IOSTANDARD LVCMOS33 } [get_ports { ETH_TXD[1] }]; #IO_L12N_T1_MRCC_16 Sch=eth_txd[1] +#set_property -dict { PACKAGE_PIN D5 IOSTANDARD LVCMOS33 } [get_ports { ETH_REFCLK }]; #IO_L11P_T1_SRCC_35 Sch=eth_refclk +#set_property -dict { PACKAGE_PIN B8 IOSTANDARD LVCMOS33 } [get_ports { ETH_INTN }]; #IO_L12P_T1_MRCC_16 Sch=eth_intn + + +##Quad SPI Flash + +#set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[0] }]; #IO_L1P_T0_D00_MOSI_14 Sch=qspi_dq[0] +#set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[1] }]; #IO_L1N_T0_D01_DIN_14 Sch=qspi_dq[1] +#set_property -dict { PACKAGE_PIN L14 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[2] }]; #IO_L2P_T0_D02_14 Sch=qspi_dq[2] +#set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[3] }]; #IO_L2N_T0_D03_14 Sch=qspi_dq[3] +#set_property -dict { PACKAGE_PIN L13 IOSTANDARD LVCMOS33 } [get_ports { QSPI_CSN }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_csn + + + + + + + + + + + + + diff --git a/src_copy/sim_1/imports/src/loto_tb.vhd b/src_copy/sim_1/imports/src/loto_tb.vhd new file mode 100644 index 0000000..d903b85 --- /dev/null +++ b/src_copy/sim_1/imports/src/loto_tb.vhd @@ -0,0 +1,94 @@ +-------------------------------------------------------------- +-- Title : Testbench for design "loto" +-- Project : +------------------------------------------------------------------------------- +-- File : loto_tb.vhd +-- Author : Matthieu Arzel <mattieu.arzel@imt-atlantique.fr> +-- Company : +-- Created : 2018-06-14 +-- Last update: 2024-02-15 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2018 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-06-14 1.0 marzel Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +------------------------------------------------------------------------------- + +entity loto_tb is + +end entity loto_tb; + +------------------------------------------------------------------------------- + +architecture ar of loto_tb is + + -- component generics + constant n_fast : natural := 0; + constant n_slow : natural := 3; + + -- component ports + signal bouton, bloque, clk_100m, rst, clk_display : std_logic := '0'; + signal rouge, vert : std_logic; + signal an : std_logic_vector(7 downto 0); + + + +begin -- architecture ar + + -- component instantiation + DUT : entity work.loto + generic map ( + n_fast => n_fast, + n_slow => n_slow) + port map ( + I_clk_100m => clk_100m, + I_rst => rst, + I_button => bouton, + I_block => bloque, + O_7segmentSelect => an, + O_red => rouge, + O_green => vert + ); + + -- clock generation + clk_100m <= not clk_100m after 10 ns; + + bloque <= '0'; + rst <= '0', '1' after 2 ns, '0' after 14 ns; + + bouton <= '0', '1' after 37 ns, '0' after 137 ns, '1' after 184 ns, + '0' after 259 ns, '1' after 312 ns, '0' after 496 ns, + '1' after 532 ns, '0' after 876 ns, '1' after 935 ns, + '0' after 1023 ns, '1' after 1229 ns, '0' after 1233 ns, + '1' after 1670 ns, '0' after 4523 ns, '1' after 6634 ns, + '0' after 7872 ns, '1' after 8212 ns, '0' after 8398 ns; + +-- bouton <= '0', '1' after 37 ns, '0' after 137 ns, +-- '1' after 437 ns, '0' after 537 ns, '1' after 637 ns, '0' after 737 ns; + + + + + + + +end architecture ar; + +------------------------------------------------------------------------------- + +configuration loto_tb_ar_cfg of loto_tb is + for ar + end for; +end loto_tb_ar_cfg; + +------------------------------------------------------------------------------- diff --git a/src_copy/sources_1/imports/src/automate.vhd b/src_copy/sources_1/imports/src/automate.vhd new file mode 100644 index 0000000..e4e8f96 --- /dev/null +++ b/src_copy/sources_1/imports/src/automate.vhd @@ -0,0 +1,136 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity automate is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_clk_display : in std_logic; + I_button : in std_logic; + I_invalide : in std_logic; + I_end : in std_logic; + O_counting : out std_logic; + O_store : out std_logic; + O_l_red : out std_logic; + O_l_green : out std_logic + ); +end automate; + +architecture a_automate of automate is + + type TYPE_ETAT is ( + st_wait_failed, + st_wait_success, + st_counting, + st_compar, + st_store, + st_end_green, + st_end_red + ); + signal SR_STATE, SR_STATE_NEXT : TYPE_ETAT; + +begin + process (I_clk, I_rst) + begin + if(I_rst = '1')then + SR_STATE <= st_wait_success; + elsif rising_edge(I_clk)then + SR_STATE <= SR_STATE_NEXT; + end if; + end process; + + process(SR_STATE, I_button, I_invalide, I_clk_display, I_end) + begin + case SR_STATE is + + when st_wait_success => + O_counting <= '0'; + O_store <= '0'; + O_l_red <= '0'; + O_l_green <= '1'; + + if I_button = '1' then + SR_STATE_NEXT <= st_counting; + else + SR_STATE_NEXT <= st_wait_success; + end if; + + when st_counting => + O_counting <= '1'; + O_store <= '0'; + O_l_red <= '0'; + O_l_green <= '0'; + + if I_button = '0' then + SR_STATE_NEXT <= st_compar; + else + SR_STATE_NEXT <= st_counting; + end if; + + when st_compar => + O_counting <= '0'; + O_store <= '0'; + O_l_red <= '0'; + O_l_green <= '0'; + + if I_invalide = '0' then + SR_STATE_NEXT <= st_store; + else + SR_STATE_NEXT <= st_wait_failed; + end if; + + when st_store => + O_counting <= '0'; + O_store <= '1'; + O_l_red <= '0'; + O_l_green <= '0'; + + if I_end = '0' then + SR_STATE_NEXT <= st_wait_success; + elsif I_end ='1' then + SR_STATE_NEXT <= st_end_red; + end if; + + when st_wait_failed => + O_counting <= '0'; + O_store <= '0'; + O_l_red <= '1'; + O_l_green <= '0'; + + if I_button = '1' then + SR_STATE_NEXT <= st_counting; + else + SR_STATE_NEXT <= st_wait_failed; + end if; + + when st_end_red => + O_counting <= '0'; + O_store <= '0'; + O_l_red <= '1'; + O_l_green <= '0'; + + if I_clk_display = '1' then + SR_STATE_NEXT <= st_end_green; + else + SR_STATE_NEXT <= st_end_red; + end if; + + when st_end_green => + O_counting <= '0'; + O_store <= '0'; + O_l_red <= '0'; + O_l_green <= '1'; + + if I_clk_display = '0' then + SR_STATE_NEXT <= st_end_red; + else + SR_STATE_NEXT <= st_end_green; + end if; + + end case; + end process; + + +end a_automate; diff --git a/src_copy/sources_1/imports/src/compteur1_49.vhd b/src_copy/sources_1/imports/src/compteur1_49.vhd new file mode 100644 index 0000000..f7f4b9e --- /dev/null +++ b/src_copy/sources_1/imports/src/compteur1_49.vhd @@ -0,0 +1,40 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity compteur1_49 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_comptage : in std_logic; + O_sortie : out std_logic_vector(5 downto 0) + ); + +end compteur1_49; + +architecture compteur_a of compteur1_49 is + + signal SR_cpt_val : unsigned(5 downto 0); + +begin + + cpt : process (I_clk, I_rst) + + begin + if I_rst = '1' then + SR_cpt_val <= to_unsigned(1, 6); + elsif rising_edge(I_clk) then + if I_comptage = '1' then + if SR_cpt_val = 49 then + SR_cpt_val <= to_unsigned(1, 6); + else + SR_cpt_val <= SR_cpt_val + 1; + end if; + end if; + end if; + end process cpt; + + O_sortie <= std_logic_vector(SR_cpt_val); + +end compteur_a; diff --git a/src_copy/sources_1/imports/src/compteur_modulo4.vhd b/src_copy/sources_1/imports/src/compteur_modulo4.vhd new file mode 100644 index 0000000..f2b951f --- /dev/null +++ b/src_copy/sources_1/imports/src/compteur_modulo4.vhd @@ -0,0 +1,69 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity compteur_modulo4 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + O_CounterMod4 : out std_logic_vector(1 downto 0); + O_parallel1 : out std_logic; + O_parallel2 : out std_logic; + O_parallel3 : out std_logic; + O_parallel4 : out std_logic + ); +end compteur_modulo4; + +architecture modulo4_a of compteur_modulo4 is + + signal SR_Counter : unsigned(1 downto 0); + +begin + + mod4 : process (clk, rst) + + begin + if rst = '1' then + SR_Counter <= "00"; + elsif rising_edge(clk) then + if SR_Counter = "11" then + SR_Counter <= "00"; + else + SR_Counter <= SR_Counter + 1; + end if; + end if; + end process mod4; + + O_CounterMod4 <= std_logic_vector(SR_Counter); + + parallel : process (SR_Counter) + begin + case SR_Counter is + when "00" => + O_parallel1 <= '0'; + O_parallel2 <= '1'; + O_parallel3 <= '1'; + O_parallel4 <= '1'; + + when "01" => + O_parallel1 <= '1'; + O_parallel2 <= '0'; + O_parallel3 <= '1'; + O_parallel4 <= '1'; + + when "10" => + O_parallel1 <= '1'; + O_parallel2 <= '1'; + O_parallel3 <= '0'; + O_parallel4 <= '1'; + + when others => + O_parallel1 <= '1'; + O_parallel2 <= '1'; + O_parallel3 <= '1'; + O_parallel4 <= '0'; + + end case; + end process parallel; + +end modulo4_a; diff --git a/src_copy/sources_1/imports/src/compteur_modulo6.vhd b/src_copy/sources_1/imports/src/compteur_modulo6.vhd new file mode 100644 index 0000000..6e18d46 --- /dev/null +++ b/src_copy/sources_1/imports/src/compteur_modulo6.vhd @@ -0,0 +1,42 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity compteur_modulo6 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_block : in std_logic; + O_CounterMod6 : out std_logic_vector(2 downto 0) + ); + +end compteur_modulo6; + + +architecture modulo6_a of compteur_modulo6 is + + signal SR_Counter : unsigned(2 downto 0); + +begin + + process (I_clk, I_rst) + begin + if I_rst = '1' then + SR_Counter <= "000"; + elsif rising_edge(I_clk) then + if I_block = '1' then + SR_Counter <= SR_Counter; + else + if SR_counter = "101" then + SR_Counter <= "000"; + else + SR_Counter <= SR_Counter + 1; + end if; + end if; + end if; + end process; + + O_CounterMod6 <= std_logic_vector(SR_Counter); + +end modulo6_a; diff --git a/src_copy/sources_1/imports/src/compteur_modulo6_tb.vhd b/src_copy/sources_1/imports/src/compteur_modulo6_tb.vhd new file mode 100644 index 0000000..ff49f9e --- /dev/null +++ b/src_copy/sources_1/imports/src/compteur_modulo6_tb.vhd @@ -0,0 +1,57 @@ +------------------------------------------------------------------------------- +-- Title : Testbench for design "compteur_modulo6" +-- Project : +------------------------------------------------------------------------------- +-- File : compteur_modulo6_tb.vhd +-- Author : Matthieu Arzel <marzel@marzel-XPS-13-9350> +-- Company : +-- Created : 2019-01-10 +-- Last update: 2024-02-15 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2019 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2019-01-10 1.0 marzel Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity compteur_modulo6_tb is +end entity compteur_modulo6_tb; + +architecture arch of compteur_modulo6_tb is + + signal SC_rst : std_logic := '0'; + signal SC_block : std_logic := '0'; + signal SC_CounterMod6 : std_logic_vector(2 downto 0); + signal SR_Clk : std_logic := '1'; + +begin + + DUT : entity work.compteur_modulo6 + port map ( + I_clk => SR_Clk, + I_rst => SC_rst, + I_block => SC_block, + O_counterMod6 => SC_CounterMod6); + + SR_Clk <= not SR_Clk after 7 ns; + SC_rst <= '0', '1' after 11 ns, '0' after 29 ns, '1' after 123 ns, '0' after 147 ns; + SC_block <= '0', '1' after 33 ns, '0' after 79 ns, '1' after 211 ns, '0' after 251 ns; + +end architecture arch; + +------------------------------------------------------------------------------- + +configuration compteur_modulo6_tb_arch_cfg of compteur_modulo6_tb is + for arch + end for; +end compteur_modulo6_tb_arch_cfg; + +------------------------------------------------------------------------------- diff --git a/src_copy/sources_1/imports/src/compteur_valid.vhd b/src_copy/sources_1/imports/src/compteur_valid.vhd new file mode 100644 index 0000000..7e799d2 --- /dev/null +++ b/src_copy/sources_1/imports/src/compteur_valid.vhd @@ -0,0 +1,39 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity compteur_valid is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_comptage : in std_logic; + O_adr : out std_logic_vector(2 downto 0); + O_fin : out std_logic + ); +end compteur_valid; + +architecture a_compteur_valid of compteur_valid is + + signal SR_Counter : integer range 0 to 5; + +begin + + process (I_clk, I_rst) + begin + if I_rst = '1' then + SR_Counter <= 0; + elsif rising_edge(I_clk) then + if I_comptage = '1' then + if SR_Counter = 5 then + SR_Counter <= 0; + else + SR_Counter <= SR_Counter + 1; + end if; + end if; + end if; + end process; + + O_adr <= std_logic_vector(to_unsigned(SR_Counter, 3)); + O_fin <= '1' when SR_Counter = 5 else '0'; + +end a_compteur_valid; diff --git a/src_copy/sources_1/imports/src/diviseur_freq.vhd b/src_copy/sources_1/imports/src/diviseur_freq.vhd new file mode 100644 index 0000000..63883d3 --- /dev/null +++ b/src_copy/sources_1/imports/src/diviseur_freq.vhd @@ -0,0 +1,36 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.NUMERIC_STD.all; + +entity diviseur_freq is + generic ( + n_fast : natural := 15; + n_slow : natural := 24 + ); + port ( + I_clk : in std_logic; + I_rst : in std_logic; + O_fast : out std_logic; + O_slow : out std_logic + ); +end diviseur_freq; + +architecture Behavioral of diviseur_freq is + + signal SR_counter : unsigned (26 downto 0); + +begin + + process (I_clk, I_rst) + begin + if I_rst = '1' then + SR_counter <= (others => '0'); + elsif rising_edge(I_clk) then + SR_counter <= SR_counter + 1; + end if; + end process; + + O_fast <= SR_counter(n_fast); + O_slow <= SR_counter(n_slow); + +end Behavioral; diff --git a/src_copy/sources_1/imports/src/led_pwm.vhd b/src_copy/sources_1/imports/src/led_pwm.vhd new file mode 100644 index 0000000..d7729c3 --- /dev/null +++ b/src_copy/sources_1/imports/src/led_pwm.vhd @@ -0,0 +1,39 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity led_pwm is + + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_ledR : in std_logic; + I_ledV : in std_logic; + O_ledR_PWM : out std_logic; + O_ledV_PWM : out std_logic + ); + +end entity led_pwm; + +architecture arch of led_pwm is + + signal SR_cpt_leds : unsigned(4 downto 0); + signal SR_cpt_leds_reg : unsigned(4 downto 0); + +begin -- architecture arch + + leds_pwm : process (I_clk, I_rst) is + begin + if I_rst = '1' then + SR_cpt_leds <= (others => '0'); + SR_cpt_leds_reg <= (others => '0'); + elsif rising_edge(I_clk) then + SR_cpt_leds <= SR_cpt_leds + 1; + SR_cpt_leds_reg <= SR_cpt_leds; + end if; + end process leds_pwm; + + O_ledR_PWM <= I_ledR and SR_cpt_leds(4) and not(SR_cpt_leds_reg(4)); + O_ledV_PWM <= I_ledV and SR_cpt_leds(4) and not(SR_cpt_leds_reg(4)); + +end architecture arch; diff --git a/src_copy/sources_1/imports/src/loto.vhd b/src_copy/sources_1/imports/src/loto.vhd new file mode 100644 index 0000000..3b7c175 --- /dev/null +++ b/src_copy/sources_1/imports/src/loto.vhd @@ -0,0 +1,192 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity loto is + generic ( + n_fast : natural := 15; + n_slow : natural := 25); + port ( + I_button : in std_logic; + I_block : in std_logic; + I_clk_100m : in std_logic; + I_rst : in std_logic; + O_7segmentDisplay : out std_logic_vector(6 downto 0); + O_7segmentSelect : out std_logic_vector(7 downto 0); + O_red : out std_logic; + O_green : out std_logic + ); +end entity loto; + +architecture arch of loto is + + component tirage is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_clk_display : in std_logic; + I_button : in std_logic; + O_reg0 : out std_logic_vector(5 downto 0); + O_reg1 : out std_logic_vector(5 downto 0); + O_reg2 : out std_logic_vector(5 downto 0); + O_reg3 : out std_logic_vector(5 downto 0); + O_reg4 : out std_logic_vector(5 downto 0); + O_reg5 : out std_logic_vector(5 downto 0); + O_l_red : out std_logic; + O_l_green : out std_logic); + end component tirage; + + component compteur_modulo6 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_block : in std_logic; + O_CounterMod6 : out std_logic_vector(2 downto 0)); + end component compteur_modulo6; + + component diviseur_freq is + generic ( + n_fast : natural; + n_slow : natural); + port ( + I_clk : in std_logic; + I_rst : in std_logic; + O_fast : out std_logic; + O_slow : out std_logic + ); + end component diviseur_freq; + + component transcodeur7s_d_u is + port ( + I_number : in std_logic_vector(5 downto 0); + O_unit : out std_logic_vector (6 downto 0); + O_ten : out std_logic_vector (6 downto 0) + ); + end component transcodeur7s_d_u; + + component mux6_1 is + port ( + I_0 : in std_logic_vector(5 downto 0); + I_1 : in std_logic_vector(5 downto 0); + I_2 : in std_logic_vector(5 downto 0); + I_3 : in std_logic_vector(5 downto 0); + I_4 : in std_logic_vector(5 downto 0); + I_5 : in std_logic_vector(5 downto 0); + I_sel : in std_logic_vector(2 downto 0); + O_mux6 : out std_logic_vector(5 downto 0) + ); + end component mux6_1; + + component modulo4 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + O_Mod4 : out std_logic_vector(1 downto 0); + O_decod : out std_logic_vector(3 downto 0) + ); + end component modulo4; + + signal SC_clkDisplay : std_logic; + signal SC_clk : std_logic; + signal SC_reg0 : std_logic_vector(5 downto 0); + signal SC_reg1 : std_logic_vector(5 downto 0); + signal SC_reg2 : std_logic_vector(5 downto 0); + signal SC_reg3 : std_logic_vector(5 downto 0); + signal SC_reg4 : std_logic_vector(5 downto 0); + signal SC_reg5 : std_logic_vector(5 downto 0); + signal SC_regReadAddress : std_logic_vector(2 downto 0); + signal SC_selectedReg : std_logic_vector(5 downto 0); + signal SC_unit : std_logic_vector(6 downto 0); + signal SC_ten : std_logic_vector(6 downto 0); + signal SC_minus : std_logic_vector(6 downto 0); + signal SC_numTranscode : std_logic_vector(6 downto 0); + signal SC_displaySelect : std_logic_vector(1 downto 0); + +begin + + tirage_1 : entity work.tirage + port map ( + I_clk => SC_clk, + I_rst => I_rst, + I_clk_display => SC_clkDisplay, + I_button => I_button, + O_reg0 => SC_reg0, + O_reg1 => SC_reg1, + O_reg2 => SC_reg2, + O_reg3 => SC_reg3, + O_reg4 => SC_reg4, + O_reg5 => SC_reg5, + O_l_red => O_red, + O_l_green => O_green + ); + + modulo6_1 : entity work.compteur_modulo6 + port map ( + I_clk => SC_clkDisplay, + I_rst => I_rst, + I_block => I_block, + O_CounterMod6 => SC_regReadAddress + ); + + diviseur_freq_1 : entity work.diviseur_freq + generic map ( + n_fast => n_fast, + n_slow => n_slow) + port map ( + I_clk => I_clk_100m, + I_rst => I_rst, + O_fast => SC_clk, + O_slow => SC_clkDisplay + ); + + mux6_1_1 : entity work.mux6_1 + port map ( + I_0 => SC_reg0, + I_1 => SC_reg1, + I_2 => SC_reg2, + I_3 => SC_reg3, + I_4 => SC_reg4, + I_5 => SC_reg5, + I_sel => SC_regReadAddress, + O_mux6 => SC_selectedReg + ); + + transcod_1 : entity work.transcodeur7s_d_u(transcod_int) --(transcod_ARCH) + port map ( + I_number => SC_selectedReg, + O_unit => SC_unit, + O_ten => SC_ten + ); + + modulo4_2 : entity work.modulo4 + port map ( + I_clk => SC_clk, + I_rst => I_rst, + O_Mod4 => SC_displaySelect, + O_decod => O_7segmentSelect(3 downto 0) + ); + + + with to_integer(unsigned(SC_regReadAddress)) select SC_numTranscode <= + "1111001" when 0, -- 1 for a 0 for better readability + "0100100" when 1, + "0110000" when 2, + "0011001" when 3, + "0010010" when 4, + "0000010" when 5, + "0110000" when others; + + O_7segmentSelect(4) <= '1'; + O_7segmentSelect(5) <= '1'; + O_7segmentSelect(6) <= '1'; + O_7segmentSelect(7) <= '1'; + + SC_minus <= "0111111"; + + with SC_displaySelect select O_7segmentDisplay <= + SC_unit when "00", + SC_ten when "01", + SC_minus when "10", + SC_numTranscode when others; + +end architecture arch; diff --git a/src_copy/sources_1/imports/src/modulo4.vhd b/src_copy/sources_1/imports/src/modulo4.vhd new file mode 100644 index 0000000..42c2f6a --- /dev/null +++ b/src_copy/sources_1/imports/src/modulo4.vhd @@ -0,0 +1,51 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity modulo4 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + O_Mod4 : out std_logic_vector(1 downto 0); + O_decod : out std_logic_vector(3 downto 0) + ); + +end modulo4; + +architecture modulo4_a of modulo4 is + + signal SR_Counter : unsigned(1 downto 0); + +begin + + process (I_clk, I_rst) + begin + if I_rst = '1' then + SR_Counter <= "00"; + elsif rising_edge(I_clk) then + if SR_Counter = "11" then + SR_Counter <= "00"; + else + SR_Counter <= SR_Counter + 1; + end if; + end if; + end process; + + O_Mod4 <= std_logic_vector(SR_Counter); + + process (SR_Counter) + begin + O_decod(0) <= '1'; + O_decod(1) <= '1'; + O_decod(2) <= '1'; + O_decod(3) <= '1'; + case SR_Counter is + when "00" => O_decod(0) <= '0'; + when "01" => O_decod(1) <= '0'; + when "10" => O_decod(2) <= '0'; + when others => O_decod(3) <= '0'; + end case; + end process; + +end modulo4_a; diff --git a/src_copy/sources_1/imports/src/mux6_1.vhd b/src_copy/sources_1/imports/src/mux6_1.vhd new file mode 100644 index 0000000..20307f8 --- /dev/null +++ b/src_copy/sources_1/imports/src/mux6_1.vhd @@ -0,0 +1,47 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +entity mux6_1 is + port ( + I_0 : in std_logic_vector(5 downto 0); + I_1 : in std_logic_vector(5 downto 0); + I_2 : in std_logic_vector(5 downto 0); + I_3 : in std_logic_vector(5 downto 0); + I_4 : in std_logic_vector(5 downto 0); + I_5 : in std_logic_vector(5 downto 0); + I_sel : in std_logic_vector(2 downto 0); + O_mux6 : out std_logic_vector(5 downto 0) + ); + +end mux6_1; + +------------------------------------------------------------------------- + +architecture a_mux6_1 of mux6_1 is +begin + process(I_0, I_1, I_2, I_3, I_4, I_5, I_sel) + begin + case I_sel is + when "000" => + O_mux6 <= I_0; + + when "001" => + O_mux6 <= I_1; + + when "010" => + O_mux6 <= I_2; + + when "011" => + O_mux6 <= I_3; + + when "100" => + O_mux6 <= I_4; + + when "101" => + O_mux6 <= I_5; + + when others => + O_mux6 <= "000000"; + end case; + end process; +end a_mux6_1; diff --git a/src_copy/sources_1/imports/src/mux6_1_tb.vhd b/src_copy/sources_1/imports/src/mux6_1_tb.vhd new file mode 100644 index 0000000..a79053f --- /dev/null +++ b/src_copy/sources_1/imports/src/mux6_1_tb.vhd @@ -0,0 +1,79 @@ +------------------------------------------------------------------------------- +-- Title : Testbench for design "mux6_1" +-- Project : +------------------------------------------------------------------------------- +-- File : mux6_1_tb.vhd +-- Author : Matthieu Arzel +-- Company : +-- Created : 2018-12-17 +-- Last update: 2024-02-15 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2018 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-12-17 1.0 marzel Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + + + +entity mux6_1_tb is + +end entity mux6_1_tb; + +architecture arch of mux6_1_tb is + + signal E0 : std_logic_vector(5 downto 0) := (0 => '1', others => '0'); + signal E1 : std_logic_vector(5 downto 0) := (1 => '1', others => '0'); + signal E2 : std_logic_vector(5 downto 0) := (2 => '1', others => '0'); + signal E3 : std_logic_vector(5 downto 0) := (3 => '1', others => '0'); + signal E4 : std_logic_vector(5 downto 0) := (4 => '1', others => '0'); + signal E5 : std_logic_vector(5 downto 0) := (5 => '1', others => '0'); + signal COMMANDE : std_logic_vector(2 downto 0) := (others => '0'); + signal S : std_logic_vector(5 downto 0); + signal Clk : std_logic := '1'; + +begin + DUT : entity work.mux6_1 + port map ( + I_0 => E0, + I_1 => E1, + I_2 => E2, + I_3 => E3, + I_4 => E4, + I_5 => E5, + I_sel => COMMANDE, + O_mux6 => S); + + Clk <= not Clk after 10 ns; + + cpt : process (clk) is + begin + if rising_edge(clk) then + if(COMMANDE = "101") then + COMMANDE <= "000"; + else + COMMANDE <= std_logic_vector(unsigned(COMMANDE)+1); + end if; + end if; + end process cpt; + +end architecture arch; + +------------------------------------------------------------------------------- + +configuration mux6_1_tb_arch_cfg of mux6_1_tb is + for arch + end for; +end mux6_1_tb_arch_cfg; + + +------------------------------------------------------------------------------- diff --git a/src_copy/sources_1/imports/src/registres.vhd b/src_copy/sources_1/imports/src/registres.vhd new file mode 100644 index 0000000..3dbbadc --- /dev/null +++ b/src_copy/sources_1/imports/src/registres.vhd @@ -0,0 +1,64 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity registres is + + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_wr : in std_logic; + I_adr : in std_logic_vector(2 downto 0); + I_data : in std_logic_vector(5 downto 0); + O_reg0 : out std_logic_vector(5 downto 0); + O_reg1 : out std_logic_vector(5 downto 0); + O_reg2 : out std_logic_vector(5 downto 0); + O_reg3 : out std_logic_vector(5 downto 0); + O_reg4 : out std_logic_vector(5 downto 0); + O_reg5 : out std_logic_vector(5 downto 0) + ); + +end registres; + +architecture a_registres of registres is + +begin + + process (I_clk, I_rst) + begin + if I_rst = '1' then + O_reg0 <= (others => '0'); + O_reg1 <= (others => '0'); + O_reg2 <= (others => '0'); + O_reg3 <= (others => '0'); + O_reg4 <= (others => '0'); + O_reg5 <= (others => '0'); + elsif rising_edge(I_clk) then + if I_wr = '1' then + -- if I_adr = "000" then + -- O_reg0 <= I_data; + -- elsif I_adr = "001" then + -- O_reg1 <= I_data; + -- elsif I_adr = "010" then + -- O_reg2 <= I_data; + -- elsif I_adr = "011" then + -- O_reg3 <= I_data; + -- elsif I_adr = "100" then + -- O_reg4 <= I_data; + -- elsif I_adr = "101" then + -- O_reg5 <= I_data; + -- end if; + case I_adr is + when "000" => O_reg0 <= I_data; + when "001" => O_reg1 <= I_data; + when "010" => O_reg2 <= I_data; + when "011" => O_reg3 <= I_data; + when "100" => O_reg4 <= I_data; + when "101" => O_reg5 <= I_data; + when others => null; + end case; + end if; + end if; + end process; + +end a_registres; diff --git a/src_copy/sources_1/imports/src/tirage.vhd b/src_copy/sources_1/imports/src/tirage.vhd new file mode 100644 index 0000000..0082967 --- /dev/null +++ b/src_copy/sources_1/imports/src/tirage.vhd @@ -0,0 +1,190 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + + +entity tirage is + + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_clk_display : in std_logic; + I_button : in std_logic; + O_reg0 : out std_logic_vector(5 downto 0); + O_reg1 : out std_logic_vector(5 downto 0); + O_reg2 : out std_logic_vector(5 downto 0); + O_reg3 : out std_logic_vector(5 downto 0); + O_reg4 : out std_logic_vector(5 downto 0); + O_reg5 : out std_logic_vector(5 downto 0); + O_l_red : out std_logic; + O_l_green : out std_logic + ); + +end tirage; + +architecture a_tirage of tirage is + + component automate is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_clk_display : in std_logic; + I_button : in std_logic; + I_invalide : in std_logic; + I_fin : in std_logic; + O_comptage : out std_logic; + O_enregistrement : out std_logic; + O_l_red : out std_logic; + O_l_green : out std_logic); + end component automate; + + component registres is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_wr : in std_logic; + I_adr : in std_logic_vector(2 downto 0); + I_data : in std_logic_vector(5 downto 0); + O_reg0 : out std_logic_vector(5 downto 0); + O_reg1 : out std_logic_vector(5 downto 0); + O_reg2 : out std_logic_vector(5 downto 0); + O_reg3 : out std_logic_vector(5 downto 0); + O_reg4 : out std_logic_vector(5 downto 0); + O_reg5 : out std_logic_vector(5 downto 0)); + end component registres; + + component compteur_valid is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_comptage : in std_logic; + O_adr : out std_logic_vector(2 downto 0); + O_fin : out std_logic); + end component compteur_valid; + + component comparateur is + port ( + I_reg0 : in std_logic_vector(5 downto 0); + I_reg1 : in std_logic_vector(5 downto 0); + I_reg2 : in std_logic_vector(5 downto 0); + I_reg3 : in std_logic_vector(5 downto 0); + I_reg4 : in std_logic_vector(5 downto 0); + I_nombre_courant : in std_logic_vector(5 downto 0); + O_invalide : out std_logic); + end component comparateur; + + component compteur1_49 is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_comptage : in std_logic; + O_sortie : out std_logic_vector(5 downto 0)); + end component compteur1_49; + + component led_pwm is + port ( + I_clk : in std_logic; + I_rst : in std_logic; + I_ledR : in std_logic; + I_ledV : in std_logic; + O_ledR_PWM : out std_logic; + O_ledV_PWM : out std_logic + ); + end component led_pwm; + + signal SC_recom : std_logic; + signal SC_comptage : std_logic; + signal SC_enregistrement : std_logic; + signal SC_invalide : std_logic; + signal SC_fin : std_logic; + signal SC_adr : std_logic_vector(2 downto 0); + signal SC_numero_courant : std_logic_vector(5 downto 0); + signal SC_r0 : std_logic_vector(5 downto 0); + signal SC_r1 : std_logic_vector(5 downto 0); + signal SC_r2 : std_logic_vector(5 downto 0); + signal SC_r3 : std_logic_vector(5 downto 0); + signal SC_r4 : std_logic_vector(5 downto 0); + signal SC_r5 : std_logic_vector(5 downto 0); + signal SC_l_V : std_logic; + signal SC_l_R : std_logic; + signal SC_cpt_leds : unsigned(4 downto 0); + signal SC_cpt_leds_reg : unsigned(4 downto 0); + +begin + + automate_1 : entity work.automate + port map ( + I_rst => I_rst, + I_clk => I_clk, + I_clk_display => I_clk_display, + I_button => I_button, + I_invalide => SC_invalide, + I_end => SC_fin, + O_counting => SC_comptage, + O_store => SC_enregistrement, + O_l_red => SC_l_R, + O_l_green => SC_l_V + ); + + + + registres_2 : entity work.registres + port map ( + I_clk => I_clk, + I_rst => I_rst, + I_wr => SC_enregistrement, + I_adr => SC_adr, + I_data => SC_numero_courant, + O_reg0 => SC_r0, + O_reg1 => SC_r1, + O_reg2 => SC_r2, + O_reg3 => SC_r3, + O_reg4 => SC_r4, + O_reg5 => SC_r5 + ); + + + compteur_valid_1 : entity work.compteur_valid + port map ( + I_clk => I_clk, + I_rst => I_rst, + I_comptage => SC_enregistrement, + O_adr => SC_adr, + O_fin => SC_fin + ); + + + compteur_1 : entity work.compteur1_49 + port map ( + I_clk => I_clk, + I_rst => I_rst, + I_comptage => SC_comptage, + O_sortie => SC_numero_courant + ); + + + led_pwm_1 : entity work.led_pwm + port map ( + I_clk => I_clk, + I_rst => I_rst, + I_ledR => SC_l_R, + I_ledV => SC_l_V, + O_ledR_PWM => O_l_red, + O_ledV_PWM => O_l_green + ); + + SC_invalide <= '1' when (SC_r0 = SC_numero_courant or + SC_r1 = SC_numero_courant or + SC_r2 = SC_numero_courant or + SC_r3 = SC_numero_courant or + SC_r4 = SC_numero_courant + ) else '0'; + + O_reg0 <= SC_r0; + O_reg1 <= SC_r1; + O_reg2 <= SC_r2; + O_reg3 <= SC_r3; + O_reg4 <= SC_r4; + O_reg5 <= SC_r5; + +end a_tirage; diff --git a/src_copy/sources_1/imports/src/transcodeur7s_d_u.vhd b/src_copy/sources_1/imports/src/transcodeur7s_d_u.vhd new file mode 100644 index 0000000..590cb8c --- /dev/null +++ b/src_copy/sources_1/imports/src/transcodeur7s_d_u.vhd @@ -0,0 +1,95 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.numeric_std.all; + +entity transcodeur7s_d_u is + port ( + I_number : in std_logic_vector(5 downto 0); + O_unit : out std_logic_vector (6 downto 0); + O_ten : out std_logic_vector (6 downto 0) + ); +end transcodeur7s_d_u; + +architecture transcod_ARCH of transcodeur7s_d_u is + + signal SC_u_nombre : unsigned(5 downto 0); + signal SC_u_unit : unsigned(5 downto 0); + signal SC_u_ten : unsigned(2 downto 0); + +begin + + SC_u_nombre <= unsigned(I_number); + + p_diz : process (SC_u_nombre) is + begin + if (SC_u_nombre < 10) then + SC_u_ten <= (others => '0'); + SC_u_unit <= SC_u_nombre; + elsif SC_u_nombre < 20 then + SC_u_ten <= to_unsigned(1, 3); + SC_u_unit <= SC_u_nombre - 10; + elsif SC_u_nombre < 30 then + SC_u_ten <= to_unsigned(2, 3); + SC_u_unit <= SC_u_nombre - 20; + elsif SC_u_nombre < 40 then + SC_u_ten <= to_unsigned(3, 3); + SC_u_unit <= SC_u_nombre - 30; + else + SC_u_ten <= to_unsigned(4, 3); + SC_u_unit <= SC_u_nombre - 40; + end if; + end process p_diz; + + with to_integer(SC_u_unit) select O_unit <= + "1000000" when 0, + "1111001" when 1, + "0100100" when 2, + "0110000" when 3, + "0011001" when 4, + "0010010" when 5, + "0000010" when 6, + "1111000" when 7, + "0000000" when 8, + "0010000" when others; + + with to_integer(SC_u_ten) select O_ten <= + "1000000" when 0, + "1111001" when 1, + "0100100" when 2, + "0110000" when 3, + "0011001" when others; + +end transcod_ARCH; + +architecture transcod_int of transcodeur7s_d_u is + + signal SC_unit_int : integer range 0 to 9; + signal SC_diz_int : integer range 0 to 4; + signal SC_num_int : integer range 0 to 49; + +begin + + SC_num_int <= to_integer(unsigned(I_number)); + SC_unit_int <= SC_num_int rem 10; + SC_diz_int <= SC_num_int / 10; + + with SC_unit_int select O_unit <= + "1000000" when 0, + "1111001" when 1, + "0100100" when 2, + "0110000" when 3, + "0011001" when 4, + "0010010" when 5, + "0000010" when 6, + "1111000" when 7, + "0000000" when 8, + "0010000" when others; + + with SC_diz_int select O_ten <= + "1000000" when 0, + "1111001" when 1, + "0100100" when 2, + "0110000" when 3, + "0011001" when others; + +end transcod_int; diff --git a/src_copy/sources_1/imports/src/transcodeur7s_u.vhd b/src_copy/sources_1/imports/src/transcodeur7s_u.vhd new file mode 100644 index 0000000..ad82269 --- /dev/null +++ b/src_copy/sources_1/imports/src/transcodeur7s_u.vhd @@ -0,0 +1,63 @@ +------------------------------------------------------------------------------- +-- Title : +-- Project : +------------------------------------------------------------------------------- +-- File : transcodeur7s_u.vhd +-- Author : Jean-Noel BAZIN <jnbazin@pc-disi-026.enst-bretagne.fr> +-- Company : +-- Created : 2023-10-12 +-- Last update: 2023-10-12 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: converts the 3-bit representation of a decimal (I_nombre) into a 7-segment display command (O_uni). +-- A display command is active low: to turn on a segment, apply 0. +-- a (= O_uni(6)) is the MSB, g (=O_uni(0)) is the LSB. +-- So, for digit 3 the output will be represented by "0000110". +-- _______ +-- | a | +-- f| |b +-- | | +-- |_______| +-- | g | +-- e| |c +-- | | +-- |_______| +-- d +-- +-- For this 7 segment transcoder, only the number between [0-5] are taken into account. In addition, there is a shift by 1. 0 will be represented by a 1 on the 7 segment display. +-- +------------------------------------------------------------------------------- +-- Copyright (c) 2023 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-05-30 1.0 jnbazin Created +------------------------------------------------------------------------------- + + + +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +entity transcodeur7s_u is + port ( + I_nombre : in std_logic_vector(2 downto 0); + O_uni : out std_logic_vector(6 downto 0) + ); +end transcodeur7s_u; + +architecture Behavioral of transcodeur7s_u is + +begin + + with to_integer(I_nombre) select O_uni <= + "1111001" when 0, -- 1 for a 0 + "0100100" when 1, + "0110000" when 2, + "0011001" when 3, + "0010010" when 4, + "0000010" when 5, + "0110000" when others; + +end Behavioral; diff --git a/src_copy/utils_1/imports/synth_1/loto.dcp b/src_copy/utils_1/imports/synth_1/loto.dcp new file mode 100755 index 0000000000000000000000000000000000000000..6e82c88caae8bb25d041057f7c11f3d4ffe5de76 GIT binary patch literal 43451 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 V_6s%$%5y4nGV?03NH;0B1pqAMQ3C(~ literal 0 HcmV?d00001 -- GitLab