UDBãšã®é£æºã®å®çšçãªéçºã«ãããŠãæåŸãã2çªç®ã®ã¹ããããèžãå¿ èŠããããŸãã ä»æ¥ã¯ãèªåUDBãšãã£ã¿ãŒã䜿çšããã«ãDatapath Config Toolã䜿çšããŠåæåã¢ãŒãã§éçºãè¡ããŸãã ãã®ããŒã«ã®ç¿åŸã«éåžžã«åœ¹ç«ã€ã®ã¯ãAN82156-PSoC 3ãPSoC 4ãããã³PSoC 5LP-UDBããŒã¿ãã¹ã䜿çšããPSoC Creatorã³ã³ããŒãã³ãã®èšèšã§ãã å®éãç§ã¯èªåã§å匷ããŸããã
ããããã UDBã®ããã¥ã¡ã³ãã®ç¿»èš³ãèªãã§ãããšãã«ã誰ããå®éã«ããããç¥èãåçŸããããšããŠãåºçç©ã«èšèŒãããŠãããã¹ãŠã®æ©èœãUDB Editorã§å©çšã§ããããã§ã¯ãªãããšã«æ°ä»ããŸããã ããã¯ãéçºè ãUDBãšãã£ã¿ãŒã«ç¹ã«é¢åãªã¡ã«ããºã ãé 眮ãå§ããªãã£ãããã§ãã AN82156ã®èè ã¯ãUDBãšãã£ã¿ãŒã§ã¯æ¬¡ã®ããšã¯ã§ããªããšäž»åŒµããŠããŸãã
- 䞊åããŒã¿ã®å ¥åºåãæŽçããŸãã
- åçFIFO管çãç·šæããŸãã
- FIFOã¯ããã¯ä¿¡å·ã®éãå®è£ ããŸãã
- CRCæ©èœãå®è£ ããŸãã
- PRSæ©èœãå®è£ ããŸãã
- ç信転éã®éžæãå®è£ ããŸãã
- åçãªã€ã³ããŠã³ã移è¡ãå®è£ ããŸãã
ç§èªèº«ãããUDB Editorã§ããã«ã®é åãå®è£ ããæ¹æ³ãèŠã€ããããªãã£ãããšãä»ãå ããŸãã
ãããžã§ã¯ãã§ãããã®æ©èœãå¿ èŠãªå Žåã¯ãç¬èªã®Verilogã³ãŒããäœæããå¿ èŠããããŸãã å ·äœçã«ã¯ããæžã蟌ã¿ãã§ã¯ãªããäœæããšããèšèã䜿çšããŸããã ãã®ããã°ã©ãã³ã°èšèªãç¥ãããšã¯ãèªè§£ã¬ãã«ã§ååã§ãã ã€ãŸããã©ã®ãã¶ã€ã³ãäœã®ããã«å¿ èŠãªã®ããç解ããå¿ èŠããããŸãã ãããŠããŒãããæžãããšãã§ããããšã¯åžžã«åœ¹ã«ç«ã¡ãŸããããã®èšäºã§çŽ¹ä»ããå 容ã«ã¯ãã®ã¹ãã«ã¯å¿ èŠãããŸããã
解決å¯èœãªåé¡ãšããŠãååæã®ã±ãŒã¹ãéžæããŸããã äžè¬ã«ããã©ã¬ã«ããŒãã«ããŒã¿ãåºåããããšã«ããŸãããç¹ã«ãæå ã«ããããã¹ãLCDã«ã¯ãã©ã¬ã«ããŒãããããŸãã 3幎åã«MZ3D 3Dããªã³ã¿ãŒãSTM32ã«ç§»æ€ãããšããç§ã¯ãããMZ3D 3Dããªã³ã¿ãŒããåŒãåºããŸããã ãã®ãããã±ãŒã¹ã¯ååæã§ããä»æ¥ããã®ãããªã€ã³ãžã±ãŒã¿ãŒã¯éåžžI2Cå ¥åãåããŠãããå®éã®ç掻ã§ã¯ã¯ã€ã€ãŒã®æãä»ããŠæ¥ç¶ããå¿ èŠã¯ãããŸããã ãã ããææ°ã®LCDã«ã¯ãã©ã¬ã«ããŒããããããã誰ã§ããããã䜿çšããŠå®éšãç¹°ãè¿ãããšãã§ããŸãã
reprap.orgããååŸãã衚瀺åãæ¿ãã¹ããŒã ãæ€èšããŠãã ããïŒããã¯ç°¡åãªããšã§ã¯ãããŸããã§ãããç§ã®ãããã€ããŒã¯ãã®ãµã€ãããããã¯ããŸãã
çŽ æŽãããã¬ã€ã¢ãŠãïŒ ãŸããèªã¿åãã«ã€ããŠèããå¿ èŠã¯ãããŸãããLCDã®ããŒã¿ã¯æžã蟌ã¿ã®ã¿å¯èœã§ãïŒR / Wã©ã€ã³ã¯æ¥å°ãããŠãããã³ãã¯ã¿ã§ã¯äœ¿çšã§ããŸããïŒã 第äºã«ãããŒã¿ã¯4ããã圢åŒã§ããããããã©ã¬ã«åºåãåŠçã§ããã ãã§ãªããããã«çœ®æé¢æ°ã®åäœã確èªããããšãã§ããŸãã
ãããžã§ã¯ãäœæ
ãã®ãããPSoC Creatorãèµ·åãã ãã¡ã€ã«->æ°èŠ->ãããžã§ã¯ããéžæããŸãïŒ
次ã«ããã¬ããããŒããéžæããŸãã
次ã¯ç©ºã®å³ã§ãã
ãããžã§ã¯ãLCDTest2ãåŒã³åºããŸãã
ããŠãåãšåãããã«ã[ ã³ã³ããŒãã³ã ]ã¿ãã«ç§»åããŸãã
ãããŠããããžã§ã¯ããéžæããããããŠã¹ã®å³ãã¿ã³ãæŒããŠã[ ã³ã³ããŒãã³ãé ç®ã®è¿œå ]ãéžæããŸãã
ããã§ã ã·ã³ãã«ãŠã£ã¶ãŒããéžæããå¿ èŠããããŸãã ååãä»ããŸããã ...ããŠã LCD4bitãšããŸãããã
次ã®ããŒããã·ã³ãã«ã«å²ãåœãŠãŸããã
clkã¯ã¯ããã¯å ¥åã§ãã LCDãã¬ãã£ãã¯ã¹ã®ä»ããããŒãã¯ãæšæºã®LCDããŒãã§ãã ç©ºè ¹-FIFOã«ç©ºãé åãããããšãDMAãŠãããã«äŒããåºåã«ã€ããŠã¯ã RGB LEDã®å¶åŸ¡ã«é¢ããèšäºã§èª¬æãããŠããŸã ã [OK]ãã¯ãªãã¯ããŠãã£ã©ã¯ã¿ãŒãååŸããŸãã
次ã«ããã®ã·ã³ãã«ã«åºã¥ããŠãVerilogãã³ãã¬ãŒããçæããå¿ èŠããããŸãã ã·ã³ãã«ã®è¿ãã§ããŠã¹ã®å³ãã¿ã³ãæŒããã³ã³ããã¹ãã¡ãã¥ãŒã§[ Verilogã®çæ ]ãéžæããŸãã
次ã®å³ã«ç€ºããã³ãã¬ãŒããååŸããŸããïŒããã¹ã圢åŒã§ã¯ãŸã æå³ããããŸããïŒïŒ
ã¢ãžã¥ãŒã«ãšããã€ãã®ã»ã¯ã·ã§ã³ãäœæããŸããã ãããã圌ãã¯ãŸã ããŒã¿ãã¹ãäœæããŠããŸããã è¿œå ããã«ã¯ããããžã§ã¯ãããªãŒã«ç§»åãã LCD4bit.vãã¡ã€ã«ãéžæããããŠã¹ã®å³ãã¿ã³ãæŒããŠã衚瀺ãããã³ã³ããã¹ãã¡ãã¥ãŒã§Datapath Config ToolãéžæããŸãã
ç§ãã¡ã®åã«ãŠã£ã³ããŠãéããŸãããä»ã®ãšããã¯éšåçã«ãã衚瀺ããŸããã
æããŠãã ãããããŒã¿ãã¹ãšãã£ã¿ãŒã ç¬èªã®ããã¥ã¡ã³ãã®ç¿»èš³ã§èª¬æããããã¹ãŠã®ããããå«ãŸããŠããŸãã ãããããããã®ããããéåžžã«å€ããããåæã®é ã¯ç§ã¯åœŒãèŠãŸããããäœããããããšãæããŠããŸããã èŠãŠãèŠãŠãåºãŠã ãããŠãã°ããããŠãããã«æ £ããŠããã圌ã¯äœããããããšãå§ããŸããã å®éããããç§ãçªã®äžéšã ããæã£ãŠããçç±ã§ãã ãªãäºåã«ã¿ããªãæããããã®ã§ããïŒ ãããŸã§ã¯ãããŒã¿ãã¹ãäœæããå¿ èŠãããã ããªã®ã§ãã¡ãã¥ãŒé ç®[ç·šé]- > [æ°ããããŒã¿ãã¹ ]ãéžæããŸãã
衚瀺ããããã€ã¢ãã°ã§éžæãããªãã·ã§ã³ã¯ã©ãã§ããïŒ
質åã¯èŠãããããå°ãæ·±å»ã§ãã 次ã®æ®µèœããã€ã©ã€ãããŠã誰ãæãŸããªãããã«ããŸãïŒç§ã¯èªåèªèº«ãæãŸããŠãç§ãåŸããã®ãããããã¯ãŒã¯äžã®è³ªåãèŠãŠã誰ãå®éã«çããŸããã§ããããããŠçãã¯AN82156ã«ãããŸããããªãã¯ããã«ããããã«ãããæãã«èªãå¿ èŠããããŸãç®ç«ããªãçããã¬ãŒãºïŒã
䞊åããŒã¿ã䜿çšããå Žåã¯ããªãã·ã§ã³CY_PSOC3_DPãå¿ ãéžæããå¿ èŠããããŸãã ä»ã®ãªãã·ã§ã³ã«ã¯ããã©ã¬ã«ããŒã¿ãæ¥ç¶ããããã®ããŒãã¯å«ãŸããŸãããã ããã ã€ã³ã¹ã¿ã³ã¹ãLCD_DPãšåŒã³ãŸãã
[OK]ãã¯ãªãã¯ãã ããŒã¿ãã¹æ§æããŒã«ãä»ããéããŠãçµæã®ä¿åã«åæããŸãã åŸã§ããã«æ»ã£ãŠããŸãã
Verilogã³ãŒããæ¡åŒµãããŸããã çŸåšãããŒã¿ãã¹ããããŸãã 圌ã®å§ãŸãã¯å®å šã«èªããªãã Datapath Config Toolã«ãã£ãŠæ§æãããŸãã
ãããŠãããŒã¿ãã¹ã®èª¬æã®çµããã決å®ããŸãã ç§ãã¡ã®ãµã€ãã¯ãããªæã
ïŒãã®æç¹ããããã¹ãŠãããã¹ã圢åŒã«ããããšãçã«ããªã£ãŠããŸãïŒã
)) LCD_DP( /* input */ .reset(1'b0), /* input */ .clk(1'b0), /* input [02:00] */ .cs_addr(3'b0), /* input */ .route_si(1'b0), /* input */ .route_ci(1'b0), /* input */ .f0_load(1'b0), /* input */ .f1_load(1'b0), /* input */ .d0_load(1'b0), /* input */ .d1_load(1'b0), /* output */ .ce0(), /* output */ .cl0(), /* output */ .z0(), /* output */ .ff0(), /* output */ .ce1(), /* output */ .cl1(), /* output */ .z1(), /* output */ .ff1(), /* output */ .ov_msb(), /* output */ .co_msb(), /* output */ .cmsb(), /* output */ .so(), /* output */ .f0_bus_stat(), /* output */ .f0_blk_stat(), /* output */ .f1_bus_stat(), /* output */ .f1_blk_stat(), /* input */ .ci(1'b0), // Carry in from previous stage /* output */ .co(), // Carry out to next stage /* input */ .sir(1'b0), // Shift in from right side /* output */ .sor(), // Shift out to right side /* input */ .sil(1'b0), // Shift in from left side /* output */ .sol(), // Shift out to left side /* input */ .msbi(1'b0), // MSB chain in /* output */ .msbo(), // MSB chain out /* input [01:00] */ .cei(2'b0), // Compare equal in from prev stage /* output [01:00] */ .ceo(), // Compare equal out to next stage /* input [01:00] */ .cli(2'b0), // Compare less than in from prv stage /* output [01:00] */ .clo(), // Compare less than out to next stage /* input [01:00] */ .zi(2'b0), // Zero detect in from previous stage /* output [01:00] */ .zo(), // Zero detect out to next stage /* input [01:00] */ .fi(2'b0), // 0xFF detect in from previous stage /* output [01:00] */ .fo(), // 0xFF detect out to next stage /* input [01:00] */ .capi(2'b0), // Software capture from previous stage /* output [01:00] */ .capo(), // Software capture to next stage /* input */ .cfbi(1'b0), // CRC Feedback in from previous stage /* output */ .cfbo(), // CRC Feedback out to next stage /* input [07:00] */ .pi(8'b0), // Parallel data port /* output [07:00] */ .po() // Parallel data port );
æã 次ã«ãäœãäœã§ããããç解ããŸã-ããæããªãã å®éããã®ããã¹ãã«ã¯3ã€ã®ç°ãªãã°ã«ãŒãããããŸãã ããã¥ã¡ã³ãã®ç¿»èš³ãæãåºããŸãããã åçã®ããŒã¿ãã¹ã¯ã©ã®ããã«èŠããŸãããïŒ å³ã§ã¯ãã°ã«ãŒãã1ããã2ããã3ããå±ããå Žæã«ããã«æ³šç®ããŸãã
å®éãverilogã³ãŒãã®ããŒãã®æåã®ã°ã«ãŒãã¯å ¥åã§ãã å ¥åãã«ããã¬ã¯ãµãŒã®åºåã®ååïŒå³ã®ã1ãïŒãšã³ãŒãå ã®ä¿¡å·ã®ååãæ¯èŒããŸãã
ããã§ããã¹ãŠã®å ¥åããŒãã«ãªããŸããã ã¯ããã¯å ¥åãæ¥ç¶ããå¿ èŠããããUDBãšãã£ã¿ãŒã§è¡ãããããã«ãæ倧ââ6ã€ã®å ¥åã©ã€ã³ã転éã§ããŸãã ãããã®å ¥åã¯æ¬¡ã®ãšããã§ãã
/* input */ .reset(1'b0), /* input */ .clk(1'b0), /* input [02:00] */ .cs_addr(3'b0), /* input */ .route_si(1'b0), /* input */ .route_ci(1'b0), /* input */ .f0_load(1'b0), /* input */ .f1_load(1'b0), /* input */ .d0_load(1'b0), /* input */ .d1_load(1'b0),
2çªç®ã®ã°ã«ãŒãã¯åºå£ã§ãã ã³ãŒãå ã®ååã¯ãåºåãã«ããã¬ã¯ãµãŒã2ãã®å ¥åã®ååãšãäžèŽããŸãã
/* output */ .ce0(), /* output */ .cl0(), /* output */ .z0(), /* output */ .ff0(), /* output */ .ce1(), /* output */ .cl1(), /* output */ .z1(), /* output */ .ff1(), /* output */ .ov_msb(), /* output */ .co_msb(), /* output */ .cmsb(), /* output */ .so(), /* output */ .f0_bus_stat(), /* output */ .f0_blk_stat(), /* output */ .f1_bus_stat(), /* output */ .f1_blk_stat(),
æå®ãããDatapathçš®ã«ã®ã¿3çªç®ã®ã°ã«ãŒãããããŸãïŒä»ã«ã¯ãªãããã䞊åããŒã¿ã¯ãããŸããïŒã ãããã¯ãå éšããŒã¿ãã¹ä¿¡å·ã§ããããããä»ããŠç¬ç«ããŠãã§ãŒã³ããããä»ã®æçšãªã¢ã¯ã·ã§ã³ãå®è¡ãããã§ããŸãã ã³ãŒãå ã®ååã¯ãå³ã«æ£åšããå éšä¿¡å·ã®ååãšãäžèŽããŠããŸãã ãããã®ãã¡ã®1ã€ïŒãªã¹ãã®æåŸã圌ã®ååã¯po ïŒãä»ããŠã䞊åããŒã¿ããããã®ã¬ãã°ã«çŽæ¥åºåããŸãã
/* input */ .ci(1'b0), // Carry in from previous stage /* output */ .co(), // Carry out to next stage /* input */ .sir(1'b0), // Shift in from right side /* output */ .sor(), // Shift out to right side /* input */ .sil(1'b0), // Shift in from left side /* output */ .sol(), // Shift out to left side /* input */ .msbi(1'b0), // MSB chain in /* output */ .msbo(), // MSB chain out /* input [01:00] */ .cei(2'b0), // Compare equal in from prev stage /* output [01:00] */ .ceo(), // Compare equal out to next stage /* input [01:00] */ .cli(2'b0), // Compare less than in from prv stage /* output [01:00] */ .clo(), // Compare less than out to next stage /* input [01:00] */ .zi(2'b0), // Zero detect in from previous stage /* output [01:00] */ .zo(), // Zero detect out to next stage /* input [01:00] */ .fi(2'b0), // 0xFF detect in from previous stage /* output [01:00] */ .fo(), // 0xFF detect out to next stage /* input [01:00] */ .capi(2'b0), // Software capture from previous stage /* output [01:00] */ .capo(), // Software capture to next stage /* input */ .cfbi(1'b0), // CRC Feedback in from previous stage /* output */ .cfbo(), // CRC Feedback out to next stage /* input [07:00] */ .pi(8'b0), // Parallel data port /* output [07:00] */ .po() // Parallel data port );
ã ããã äœæ¥äžã«ããããã®å ¥åãšåºåã®äžéšãç¬èªã®ãšã³ãã£ãã£ã«æ¥ç¶ããæ®ããäœæããå¿ èŠããããŸããäœæãããã©ãŒã ã«ãã®ãŸãŸæ®ããŠãã ããã
UDB Editorãåç §ãšããŠäœ¿çšãã
ãããŠä»ãç§ãã¡ã«ã¯ç©ºçœããããã©ãã§äœãæžããªããã°ãªããªãããç¥ã£ãŠããŸãã ç§ãã¡ãããã«äœãå ¥åããããæ£ç¢ºã«ç解ããããšã¯æ®ã£ãŠããŸãã ããŸããŸãç§ã¯æ¯æ¥ã§ã¯ãªãVerilogèšèªã䜿çšããŠããã®ã§ãäžè¬çã«èšãã°ããã¹ãŠãèŠããŠããŸãããŸããæåããæžãã®ã¯åžžã«ã¹ãã¬ã¹ã®å€ãç¶æ³ã§ãã ãããžã§ã¯ãããã§ã«é²è¡äžã®ãšãã¯ããã¹ãŠãèšæ¶ãããŠããŸããã2ãæéäœãããªãã£ãåŸããŒãããäœããå§ãããšããã¡ããããã®ç¹å®ã®èšèªã®æ§æã®è©³çŽ°ãæãåºããªããªããŸãã ãããã£ãŠãéçºç°å¢ã«å©ããæ±ããããšããå§ãããŸãã
èªå·±ç£èŠçšã®UDBãšãã£ã¿ãŒã¯ãVerilogã³ãŒãããã«ãããŸãã ã¡ã€ã³åè·¯ã«é¢ä¿ããªãã³ã³ããŒãã³ãã¯ã³ã³ãã€ã«ãããªããããUDBãšãã£ã¿ãŒã§è£å©ã³ã³ããŒãã³ããäœæã§ããåºåã³ãŒãã«ã¯å ¥ããŸããã ããã§ãªãŒãããã³ãæç»ããããŒã¿ãã¹ã®å ¥åãšåºåã®å€§ãŸããªèª¿æŽãè¡ããèªåçæãããããã¹ããVerilogã¢ãžã¥ãŒã«ã«è»¢éããŠããã¹ãŠãåµé çã«å€æŽããŸãã ããã¯ãVerilogæ§æã®è©³çŽ°ãèŠããŠãã¹ãŠãæåããæžããããã¯ããã«ç°¡åã§ãïŒãã ããVerilogãåžžã«äœ¿çšããŠãã人ã¯ãæåããæžãæ¹ã確ãã«ç°¡åã§ãïŒããã«ãããããã«ãåµé çãªå®äºã¯ç°¡åã§ãããæéïŒã
ããã§ãè£å©ã³ã³ããŒãã³ããäœæãå§ããŸãã éåžžã®æã®åãã§ããããžã§ã¯ãã«æ°ããèŠçŽ ãè¿œå ããŸãã
ããã¯UDBããã¥ã¡ã³ãã«ãªããŸããUDBhelperãšåŒã³ãŸãããã
äœæãããã·ãŒãã«é 眮ãããã·ã³ã«ã€ããŠèããŸãã ãããè¡ãã«ã¯ãã©ã®æéãã€ã¢ã°ã©ã ã䜿çšããŠäœæããå¿ èŠãããããèæ ®ããå¿ èŠããããŸãã
ã ããã ãŸããRSä¿¡å·ãèšå®ããå¿ èŠããããŸãïŒããŒããŠã§ã¢ã§R / WããŒãã«ã¯ãã ä»ããããŠããããïŒã 次ã«ãtASãåŸ ã£ãŠãããä¿¡å·Eãç«ã¡äžããŠããŒã¿ãèšå®ããŸãïŒEã®ç«ã¡äžãããšããžã§ã®èšå®ããŒã¿ã¯å¶éãããŸããïŒã ããŒã¿ã¯tDSW以äžã®ãã¹äžã«ããå¿ èŠãããããã®åŸãä¿¡å·Eãããããããå¿ èŠããããããŒã¿ã¯å°ãªããšãtDHWã®éãRSäžã«å°ãªããšãtAHã®éååšããå¿ èŠããããŸãã
RSã¯ã³ãã³ããŸãã¯ããŒã¿ãã©ã°ã§ãã RSããŒãã®å ŽåãããŒã¿ãããã°ã³ãã³ããæžã蟌ãŸããŸãã
FIFO0çµç±ã§ã³ãã³ããéä¿¡ã ã FIFO1çµç±ã§ããŒã¿ãéä¿¡ããããšããå§ãããŸãã çŸåšã®ã¿ã¹ã¯ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããã¯äœã«ãççŸããŸããã 次ã«ãç§ãææ¡ããæéç¶æ ãã·ã³ã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
ã¢ã€ãã«ç¶æ ã§ã¯ããã·ã³ã«ã¯ãŸã FIFOããŒã¿ããããŸããã ããŒã¿ãFIFO0ã«çŸããå Žåã LoadF0ç¶æ ã«ãªããå°æ¥ã FIFO0ããA0ã«ããŒã¿ãåä¿¡ããŸãã
ã³ãã³ãã®éä¿¡äžã¯ãããŒã¿ãéä¿¡ããªãã§ãã ããã ãããã£ãŠãããŒã¿ãåä¿¡ããããã®æ¡ä»¶ã¯ãã³ãã³ããåä¿¡ããããã®æ¡ä»¶ãããåªå é äœãäœããªããŸãã
ããŒã¿ã¯ã LoadF1ç¶æ ã®A1ã§åä¿¡ããïŒ FIFO1ããã¬ãžã¹ã¿A1ã«ã®ã¿ç§»åã§ããã¬ãžã¹ã¿A0ã«ç§»åã§ããŸããïŒããã®åŸãç¶æ A1toA0ã§A1ããA0ã«ã³ããŒãããŸãã
ç¢å°ã®åæç¹ã«ã©ã®ããã«ç§»åããŠããA0ã«ããŒã¿ããããŸãã ãããã¯ãã§ã«ãã©ã¬ã«ããŒãã«åºåãããŠããŸãã Eãã³ãã¯ïŒç¶æ E_UP1 ïŒãããããEïŒç¶æ E_DOWN1 ïŒã 次ã«ãããã«ã亀æããããã®ç¶æ ïŒ SWAP ïŒãããããã®åŸEãåã³äžæããŸãïŒ E_UP2 ïŒã ããã§ã3ãããã§ãšã³ã³ãŒãã§ãã8ã€ã®ç¶æ ã䜿ãæãããŸããã ãŸããDatapathãã€ãããã¯ã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³RAMã«ã¯3ã€ã®ã¢ãã¬ã¹å ¥åãããããŸããã ããã€ãã®ããªãã¯ãé©çšã§ããŸããããã®èšäºã¯ãã§ã«å€§èŠæš¡ã§ãã ãããã£ãŠã2åç®ã«ã¯ã ã¢ã€ãã«ç¶æ ã§EãããããããŸãã ãããŠã8ã€ã®å·ã§ååã§ãã
ãŸããããŒã¿ãã¹ãã·ãŒãã«é 眮ãã以åã®èšäºã§ããªãã¿ã®æ¹æ³ã§å ¥åãšåºåãå²ãåœãŠãŸãã å ¥åã¯æ¬¡ã®ãšããã§ãã
åºåã¯æ¬¡ã®ãšããã§ãã
æ°ããããšã¯äœããããŸããããã¹ãŠã¯ãµã€ã¯ã«ã®ä»¥åã®èšäºã§ãã§ã«èª¬æãããŠããŸãã ãã®ããã空çœããããããã«åºã¥ããŠç¬èªã®æäœãå®è¡ã§ããŸãã 確ãã«ããã¹ãŠãé 調ã§ããããšã確èªããã«ã¯ãã·ã¹ãã ããããžã§ã¯ãã®æäžäœã«ç§»åããå¿ èŠããããŸããããããªããšããšã©ãŒã¯æ€åºãããŸããã ãããŠããšã©ãŒã®ãªãæåã®å®éšã§ã¯å€±æããŸãã ãããã£ãŠããã1ã€ã®è£å©ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
åè·¯ã®äœææ¹æ³ã®èª¬æã¯ãUDBã®æäœã®èª¬æãè¶ ããŠããŸãã ã©ã®ãµãŒããããæã«å ¥ãããããèŠãããŸãã DMAãŠãããã¯1ã€ãããããŸãããLCDã«ã³ãã³ããéä¿¡ãããšãã¯ã倧ããªäžæåæ¢ã«èããå¿ èŠãããããããããããã°ã©ã ã§è¡ãæ¹ãç°¡åã§ãã ä»ã®ã¢ããªã±ãŒã·ã§ã³ã®å Žåã hungry0ä¿¡å·ã䜿çšããŠé¡æšããããšã«ããã2çªç®ã®DMAãããã¯ãé 眮ããããšãã§ããŸãã
æéæ ãæ£ç¢ºã«æºããããã«ã1ã¡ã¬ãã«ãã«çããã¯ããã¯åšæ³¢æ°ãéžæããŸããã åšæ³¢æ°ä»¥äžã䜿çšããããšãå¯èœã§ãããããŒã¿ã¯å¹²æžã®å€ãç¶æ³ã§é·ãã¯ã€ã€ãä»ããŠéä¿¡ããããããã¹ãããã®ååŸã«ããŒã¿ãèšå®ããæéã¯äœè£ãæã£ãŠè¡ãæ¹ãè¯ãã§ãããã 誰ããåããã¬ããããŒãã§ç§ã®å®éšãç¹°ãè¿ãå Žåã¯ãããŒãP3.2ã䜿çšããªãã§ãã ãããããŒãäžã®ãã®èã«ã³ã³ãã³ãµãã¯ãã ä»ããããŠããŸãã ã€ã³ãã«ã¹Eã圢æããªãã£ãçç±ãçºèŠãããŸã§ãç§ã¯30å殺ããŸããã ç§ã¯ãããP3.1ã«æããŸãã-ããã¯ããã«æ©èœããŸããã ç§ã®ããŒã¿ãã¹ã¯P3.7-P3.4ã«è¡ããRSã¯P3.3ã«è¡ãã®ã§ãEã¯å ã P3.2ã«è¡ããŸãã...
ããããã«ã ãããžã§ã¯ããã³ã³ãã€ã«ããããšãããšãããªãäºæž¬å¯èœãªãšã©ãŒãçºçããŸã
ãã®ãããã·ã¹ãã ã¯äœããåéããããšããŠããŸãã ãããã圌女ã¯ãŸã åéãããã®ãäœããããŸããã ã³ãŒãã®ã³ããŒã«é²ã¿ãŸãã ãããè¡ãã«ã¯ãUDB Editorã®[Verilog]ã¿ãã«åãæ¿ããŸãïŒãã®ã¿ãã¯ãUDB Editorã·ãŒãã®ãŠã£ã³ããŠã®äžã«ãããŸãïŒã
ããã§äœãããªãã¿ã§ããïŒ ããã¹ãã®æåŸã«ãªãŒãããã³ã®æ¬æããããŸãã ãããã移è¡ãå§ããŸãããã
ãŸããããŒã¿ãã¹ã®äžã«é
眮ããŸãã
/* ==================== State Machine: SM ==================== */ always @ (posedge clock) begin : Idle_state_logic case(SM) Idle : begin if (( !F0empty ) == 1'b1) begin SM <= LoadF0 ; end else if (( !F1empty ) == 1'b1) begin SM <= LoadF1 ; end end LoadF0 : begin if (( 1'b1 ) == 1'b1) begin SM <= E_Up1 ; end end E_Up1 : begin if (( 1'b1 ) == 1'b1) begin SM <= E_Down1 ; end end E_Down1 : begin if (( 1'b1 ) == 1'b1) begin SM <= SWAP ; end end SWAP : begin if (( 1'b1 ) == 1'b1) begin SM <= E_UP2 ; end end E_UP2 : begin if (( 1'b1 ) == 1'b1) begin SM <= Idle ; end end LoadF1 : begin if (( 1'b1 ) == 1'b1) begin SM <= A1toA0 ; end end A1toA0 : begin if (( 1'b1 ) == 1'b1) begin SM <= E_Up1 ; end end default : begin SM <= Idle; end endcase end
ãã®ã³ãŒãã®äžéšã«ã¯å®£èšããããŸãïŒç¶æ ã®ååãããŒã¿ãã¹ã®ãã§ãŒã³ããªãŒãããã³ã®ç¶æ ããšã³ã³ãŒãããã¬ãžã¹ã¿ïŒã é©åãªå Žæã«è»¢éããŸã
ã³ãŒãã®ã»ã¯ã·ã§ã³ïŒ
/* ==================== Wire and Register Declarations ==================== */ localparam [2:0] Idle = 3'b000; localparam [2:0] LoadF0 = 3'b001; localparam [2:0] LoadF1 = 3'b010; localparam [2:0] E_Up1 = 3'b100; localparam [2:0] A1toA0 = 3'b011; localparam [2:0] E_Down1 = 3'b101; localparam [2:0] SWAP = 3'b110; localparam [2:0] E_UP2 = 3'b111; wire hungry0; wire F0empty; wire hungry1; wire F1empty; wire Datapath_1_d0_load; wire Datapath_1_d1_load; wire Datapath_1_f0_load; wire Datapath_1_f1_load; wire Datapath_1_route_si; wire Datapath_1_route_ci; wire [2:0] Datapath_1_select; reg [2:0] SM;
ãŸãããããŠ
ã·ã°ãã«ãã€ã³ãã£ã³ã°ãµã€ãã¯ç§»æ€å¯èœã§ãã
/* ==================== Assignment of Combinatorial Variables ==================== */ assign Datapath_1_d0_load = (1'b0); assign Datapath_1_d1_load = (1'b0); assign Datapath_1_f0_load = (1'b0); assign Datapath_1_f1_load = (1'b0); assign Datapath_1_route_si = (1'b0); assign Datapath_1_route_ci = (1'b0); assign Datapath_1_select[0] = (SM[0]); assign Datapath_1_select[1] = (SM[1]); assign Datapath_1_select[2] = (SM[2]);
ããŒã¿ãã¹ããã©ã°ã€ã³ããæãæ¥ãŸããã UDBãšãã£ã¿ãŒãã移æ€ãããã³ãŒãã¯ããã·ã³ã®ç·šéã«ã¯é©ããŠããŸãããæåã®ç·šéã«ã¯ããŸãé©ããŠããŸããã ããã§ãäžæ¹ã®ç«¯ã§ããŒã¿ãã¹å ¥åã«æ¥ç¶ããããäžæ¹ã®ç«¯ã§å®æ°ã«æ¥ç¶ãããã§ãŒã³ãäœæãããŸãã ãã ãã ããŒã¿ãã¹æ§æããŒã« ïŒæåäœæ¥ã®ãã¹ãŠãè¡ãïŒã§äœæãããã³ãŒãã§ã¯ããã¹ãŠã®å ¥åãæ¢ã«ãŒãå®æ°ã«çŽæ¥æ¥ç¶ãããŠããŸãã ãããã£ãŠãå®æ°ã§ã¯ãªãè¡ã®ã¿ãæ¥ç¶ããŸããã転éãããããã¹ãããå®æ°ã®è»¢éã«é¢é£ãããã¹ãŠãåãåããŸãã æ¥ç¶ã¯æ¬¡ã®ããã«ãªããŸããïŒè²ã¯ãããŒã¿ãã¹æ§æããŒã«ã§èªåçã«äœæããããã®ã«é¢ããŠç·šéããå Žæã匷調ããŠããŸãïŒã
åãããã¹ãïŒ
)) LCD_DP( /* input */ .reset(1'b0), /* input */ .clk(clk), /* input [02:00] */ .cs_addr(SM), /* input */ .route_si(1'b0), /* input */ .route_ci(1'b0), /* input */ .f0_load(1'b0), /* input */ .f1_load(1'b0), /* input */ .d0_load(1'b0), /* input */ .d1_load(1'b0), /* output */ .ce0(), /* output */ .cl0(), /* output */ .z0(), /* output */ .ff0(), /* output */ .ce1(), /* output */ .cl1(), /* output */ .z1(), /* output */ .ff1(), /* output */ .ov_msb(), /* output */ .co_msb(), /* output */ .cmsb(), /* output */ .so(), /* output */ .f0_bus_stat(hungry0), /* output */ .f0_blk_stat(F0empty), /* output */ .f1_bus_stat(hungry1), /* output */ .f1_blk_stat(F1empty),
䞊åããŒã¿ã¯ããå°ãè€éã§ãã ããŒã¿ãã¹ã«ã¯8ãããã®ããŒããããããã®ãã¡4ã€ã ããåãåºãå¿ èŠããããŸãã ãããã£ãŠãè£å©åè·¯ãèµ·åãããã®ååã®ã¿ãåºåã«æ¥ç¶ããŸãã
wire [7:0] tempBus; assign LCD_D = tempBus[7:4];
ãããŠã次ã®ããã«æ¥ç¶ããŸãïŒ
åãããã¹ãïŒ
/* input [07:00] */ .pi(8'b0), // Parallel data port /* output [07:00] */ .po( tempBus) // Parallel data port );
ã¢ã»ã³ãã«ãè©Šã¿ãŸãïŒShift + F6ãŸãã¯ã¡ãã¥ãŒé ç®Build-> Generate Applicationãäœ¿çš ïŒã ãšã©ãŒãçºçããŸãïŒ
ããŒãhungry0ããã³hungry1 ïŒã³ã³ããŒãã³ããäœæãããšãã«è¡šç€ºãããïŒãšãåãååã®ãã§ãŒã³ïŒãµã³ãã«ãããã©ãã°ãããšãã«è¡šç€ºãããïŒããããŸãã ãããã®ãã§ãŒã³ãåé€ããã ãã§ãïŒããŒããæ®ããŸãïŒã ãããŠã©ããã§ã¯ããã¯ä¿¡å·ããªãŒã¯ãã clkãšåŒã°ãããã®åè·¯ããããŸãã
ãã¹ãŠã®äžèŠãªåè·¯ïŒæåã«Datapathå ¥åã«ãŒãå®æ°ãæããåè·¯ãããã³hungry0ããã³hungry1 ïŒãåé€ããåŸããã¡ã€ã«ã®å é ã«æ¬¡ã®ã³ãŒããååŸããŸãã
// Your code goes here /* ==================== Wire and Register Declarations ==================== */ localparam [2:0] Idle = 3'b000; localparam [2:0] LoadF0 = 3'b001; localparam [2:0] LoadF1 = 3'b010; localparam [2:0] E_Up1 = 3'b100; localparam [2:0] A1toA0 = 3'b011; localparam [2:0] E_Down1 = 3'b101; localparam [2:0] SWAP = 3'b110; localparam [2:0] E_UP2 = 3'b111; wire F0empty; wire F1empty; reg [2:0] SM; /* ==================== Assignment of Combinatorial Variables ==================== */ wire [7:0] tempBus; assign LCD_D = tempBus[7:4];
ã¯ããã¯ããã·ã³ã®æ¬äœã®clkã«çœ®ãæãããšãåæã«èªåçæã«é©ãããã¹ãŠã®è¡ãç Žæ£ãããŸãããæåç·šéã§ã¯æ··ä¹±ãçããã ãã§ãïŒç¡æ¡ä»¶ã®çµæãTRUEãšãªããã¹ãŠã®æ¯èŒãªã©ïŒã ç¹ã«ã以äžã®äŸã§ã¯ãè¡ã®çŽååãæ¶ãããšãã§ããŸãïŒäžéšã®éå§/çµäºã¯ãªãã·ã§ã³ã§ãããã¢ã¯ã·ã§ã³ãè¿œå ããããããå¿ èŠã«ãªãå ŽåããããŸãïŒã
äžèšã®ååã«åŸã£ãŠã³ãŒãã³ã°ããåŸïŒããã³ã¯ããã¯ãclkã«çœ®ãæããåŸïŒããã®ãããªããã£ã¯æ®ããŸã
ïŒçããªã£ããããèªã¿ããããªããŸããïŒïŒ
always @ (posedge clk) begin : Idle_state_logic case(SM) Idle : begin if (( !F0empty ) == 1'b1) begin SM <= LoadF0 ; end else if (( !F1empty ) == 1'b1) begin SM <= LoadF1 ; end end LoadF0 : begin SM <= E_Up1 ; end E_Up1 : begin SM <= E_Down1 ; end E_Down1 : begin SM <= SWAP ; end SWAP : begin SM <= E_UP2 ; end E_UP2 : begin SM <= Idle ; end LoadF1 : begin SM <= A1toA0 ; end A1toA0 : begin SM <= E_Up1 ; end default : begin SM <= Idle; end endcase end
ããã§ãã³ã³ãã€ã«äžã«ã LCD_Eåè·¯ãšLCD_RSåè·¯ãæ¥ç¶ãããŠããªãããšãããããŸãã
å®éãããã¯æ¬åœã§ãïŒ
ã¹ããŒããã·ã³ã«ã¢ã¯ã·ã§ã³ãè¿œå ãããšããæ¥ãŸããã æ¥ç¶ãããŠããªããã§ãŒã³ã«å¯Ÿå¿ããããŒãã®å®£èšãregã«çœ®ãæããŸããããã¯ããã·ã³ã®æ¬äœã«æžã蟌ãããã§ãïŒããã¯Verilogèšèªã®æ§æã§ããèšè¿°ããå ŽåãããŒã¿ãã¯ãªãã¯ããŸããããªã¬ãŒãå¿ èŠã§ãããŒã¯ãŒãregã§æå®ããŸã ïŒã
åãããã¹ãïŒ
module LCD4bit ( output hungry0, output hungry1, output [3:0] LCD_D, output reg LCD_E, output reg LCD_RS, input clk );
ãããŠããã·ã³ãã¢ã¯ã·ã§ã³ã§æºãããŸãã ãªãŒãããã³ã®é·ç§»ã°ã©ããæ€èšããŠãããšãã«ãäžèšã®ããžãã¯ãæ¢ã«è©±ããã®ã§ãçµæã®ã¿ã衚瀺ããŸãã
åãããã¹ãïŒ
always @ (posedge clk) begin : Idle_state_logic case(SM) Idle : begin LCD_E <= 0; if (( !F0empty ) == 1'b1) begin SM <= LoadF0 ; LCD_RS <= 0; end else if (( !F1empty ) == 1'b1) begin SM <= LoadF1 ; LCD_RS <= 1; end end LoadF0 : begin SM <= E_Up1 ; end E_Up1 : begin SM <= E_Down1 ; LCD_E <= 1'b1; end E_Down1 : begin SM <= SWAP ; LCD_E <= 1'b0; end SWAP : begin SM <= E_UP2 ; end E_UP2 : begin SM <= Idle ; LCD_E <= 1; end LoadF1 : begin SM <= A1toA0 ; end A1toA0 : begin SM <= E_Up1 ; end default : begin SM <= Idle; end endcase end
ãã®ç¬éããããããžã§ã¯ãã®çµã¿ç«ãŠãå§ãŸããŸãã ãããã圌ã¯ãŸã åããŸããã ãããŸã§ç§ã¯æåã«èšã£ãŠããŸããïŒããã®ç¶æ ã§ã¯ãFIFOããã¬ãžã¹ã¿ãããŒãããŸããããA1ã¯ããã§A0ã«ã³ããŒããŸããããããã«ã¯ããã§ã¹ã¯ãããããŸããã äžè¬ã«ãç§ã¯å€ãã®ããšã話ããŸãããããããŸã§ã®ãšããäœã®è¡åããããŸããã§ããã ããããå®çŸããæãæ¥ãŸããã ç¶æ ãã©ã®ããã«ãšã³ã³ãŒãããããã調ã¹ãŸãã
localparam [2:0] Idle = 3'b000; localparam [2:0] LoadF0 = 3'b001; localparam [2:0] LoadF1 = 3'b010; localparam [2:0] E_Up1 = 3'b100; localparam [2:0] A1toA0 = 3'b011; localparam [2:0] E_Down1 = 3'b101; localparam [2:0] SWAP = 3'b110; localparam [2:0] E_UP2 = 3'b111;
ããŒã¿ãã¹æ§æããŒã«ãå床éããŸãã
ãããŠã CFGRAMè¡ã®ç·šéãéå§ããŸãã ç·šéãããšãã¯ãDatapathã¹ããŒã ãã€ãŸã次ã®ããšã«æ³šæããŠãã ããã
äžã®å³ã®èµ€ããã¬ãŒã ïŒããã³äžã®å³ã®ç¢å°ïŒã§ã¯ãç¶æ LoadF0 ïŒã³ãŒã001ãã€ãŸãReg1 ïŒã®ä¿®æ£æžã¿é åïŒããã³ããŒã¿ãã¹ïŒã匷調衚瀺ããŠããŸãã ã³ã¡ã³ããæåã§å ¥åããŸããã F0ã®å 容ã¯A0ã«å ¥ãã¯ãã§ãã
ç·è²ã®ãã¬ãŒã ãšç¢å°ã§ãLoadF1ã®ç¶æ ã®èšå®ãšãã¹ãããŒã¯ããŸããïŒã³ãŒã010- Reg2 ïŒã
éããã¬ãŒã ãšç¢å°ã䜿çšããŠãç¶æ A1toA0ïŒã³ãŒã011- Reg3 ïŒã®èšå®ãšãã¹ãããŒã¯ããŸããã
玫è²ã®ãã¬ãŒã ãšç¢å°ã¯ãSWAPã®ç¶æ ã®èšå®ãšãã¹ãããŒã¯ããŸããïŒã³ãŒã110- Reg6 ïŒã
æåŸã«ããªã¬ã³ãžè²ã®ç¢å°ã¯äžŠåããŒã¿ãã¹ã瀺ããŠããŸãã ãããŠã圌ãã®ããã«è¡åã¯åãããŸããã 圌ãã¯ãã€ãSRCAããåºãŠããŸãã ã»ãšãã©ã®å Žåã SRCAãšããŠA0ãéžæãããŠããŸããããŒã¿ã¯A0ããååŸãããŸãã ãã®ãããå ¥åããŒã¿ããªãã€ã¬ã¯ãããã«ã¯ãå€ãã®è£å©ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããŸãããããŒã¿ãåãå ¥ããªããããããã§ã¯ãããã®ã¢ã¯ã·ã§ã³ã¯äžèŠã§ãå šå¡ãAN82156ã§ãªã¹ããèŠã€ããŸãã ãŸããéçãªããŒã¿ãã¹èšå®ãç·šéããå¿ èŠããªãããã ããŒã¿ãã¹æ§æããŒã«ãéããŸãã
ããã ãã§ã æ³å®ãããããŒããŠã§ã¢ãå®æããŸããã Cã³ãŒãã®éçºãå§ããŸãããã ãããè¡ãã«ã¯ãã ãœãŒã¹ãã¿ãã«ç§»åããŠã main.cãã¡ã€ã«ãç·šéããŸãã
éåžžã®LCDåæåãšãABCãæååºåã¯æ¬¡ã®ããã«ãªããŸãïŒã³ãã³ãã¯FIFO0ã«è¡ããããã¥ã¡ã³ãã¯ããŒã éã«äŒæ¢ãæ¿å ¥ããå¿ èŠããããããŒã¿ã¯FIFO1ã«è¡ãããšãæãåºããŸããããŒã¿éã®äŒæ¢ã«ã€ããŠã¯äœãèŠã€ãããŸããã§ããïŒïŒ
volatile uint8_t* pFIFO0 = (uint8_t*) LCD4bit_1_LCD_DP__F0_REG; volatile uint8_t* pFIFO1 = (uint8_t*) LCD4bit_1_LCD_DP__F1_REG; pFIFO0[0] = 0x33; CyDelay (5); pFIFO0[0] = 0x33; CyDelay (100); pFIFO0[0] = 0x33; CyDelay (5); pFIFO0[0] = 0x20; CyDelay (5); pFIFO0[0] = 0x0C; // CyDelay (50); pFIFO0[0] = 0x01; // CyDelay (50); pFIFO1[0] = 'A'; pFIFO1[0] = 'B'; pFIFO1[0] = 'C';
ãªã« ç»é¢ã«æåã®æåã ããããã®ã¯ãªãã§ããïŒ
ãŸããããŒã¿åºåã®éã«é 延ãè¿œå ãããšããã¹ãŠãããŸããããŸãïŒ
ãªã·ãã¹ã³ãŒãã«ã¯ããã®ãããªäœæ¥ã«ååãªãã£ã³ãã«ããããŸããã è«çã¢ãã©ã€ã¶ãŒã§äœæ¥ã確èªããŸãã ããŒã¿èšé²ããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
ãã¹ãŠã®ããŒã¿ãé 眮ãããŠããŸãïŒããã±ãŒãžã®3ã€ã®ãã¢ïŒã ã€ã³ã¹ããŒã«ãšã¹ãããããŒã¿ã®æéãååãªããªã¥ãŒã ã«å²ãåœãŠãããŸãã äžè¬ã«ãã¿ã€ã ãã€ã¢ã°ã©ã ã®èŠ³ç¹ããã¯ããã¹ãŠãæ£ããè¡ãããŸãã ç§åŠçãªåé¡ã¯è§£æ±ºãããåžæã®æéå³ã圢æãããŸãã ããã«ãšã³ãžãã¢ãªã³ã°ããããŸã-ãããã ããã¯ãLCDã«åãä»ããããããã»ããµã®é床ãé ãããã§ãã ãã€ãéã«é 延ãè¿œå ããŸãã
7ãããã«ãŠã³ã¿ãŒã䜿çšããŠé 延ã圢æããåæã«ãã®ãããªã·ã¹ãã ã«è¿œå ããããã«ãã¬ãŒãã³ã°ããŸãã äžå®æé以äžã¢ã€ãã«ç¶æ ã«ãããšã7ãããã«ãŠã³ã¿ãŒããã®æéã枬å®ããŸãã ç¹°ãè¿ããŸãããã³ãŒããäœæããã®ã§ã¯ãªããäœæããŸãã ãããã£ãŠãåã³UDBãšãã£ã¿ãŒã®è£å©ã³ã³ããŒãã³ãã«ç§»åããŠãã«ãŠã³ã¿ãŒãã¯ãŒã¯ã·ãŒãã«è¿œå ãããã®ãã©ã¡ãŒã¿ãŒã次ã®ããã«èšå®ããŸãã
ãã®ã«ãŠã³ã¿ã¯åžžã«æ©èœããŸãïŒ æå¹å㯠1ã«èšå®ãããŸãïŒã ãããããã·ã³ãE_UP2ç¶æ ã«ãªã£ããšãã«ããŒããããŸãïŒãã®åŸãããã«ã¢ã€ãã«ç¶æ ã«ãªããŸãïŒã ã«ãŠã³ã¿ããŒãã«ã«ãŠã³ãããããšã Count7_1_tcè¡ã1ã«åŒãäžããããŸããããã«ããã ã¢ã€ãã«ç¶æ ãçµäºããããã®è¿œå æ¡ä»¶ãäœæãããŸãã ãã®å³ã«ã¯æéã®å€ãå«ãŸããŠããŸãããVerilogã³ãŒãã«ã¯å«ãŸããŠããŸããã Cã³ãŒãã«å ¥åããå¿ èŠããããŸãã ãã ããæåã«ã[Verilog]ã¿ãã«åãæ¿ããŠãèªåçæãããVerilogã³ãŒãã転éããŸãã ãŸããã«ãŠã³ã¿ãŒãæ¥ç¶ããå¿ èŠããããŸãïŒãã®ã³ãŒãã¯ãã¡ã€ã«ã®å é ã«ãããå é ã«ã移åããŠããŸãïŒã
`define CY_BLK_DIR "$CYPRESS_DIR\..\psoc\content\CyComponentLibrary\CyComponentLibrary.cylib\Count7_v1_0" `include "$CYPRESS_DIR\..\psoc\content\CyComponentLibrary\CyComponentLibrary.cylib\Count7_v1_0\Count7_v1_0.v"
ç·ãšå®æ°ã®åµé çãªæŽç·Žãã©ã®ããã«å®è¡ããããã¯ãã§ã«èª¬æãããŠããã®ã§ãçµæã瀺ããŸãã çµæãšããŠè¿œå ããããã§ãŒã³ãšå²ãåœãŠã次ã«ç€ºããŸãïŒæ®ãã¯å®æ°ãèšå®ãããããããããç Žæ£ããŸããïŒã
wire Count7_1_load; wire Count7_1_tc; assign Count7_1_load = (SM==E_UP2);
ãããŠããã¡ã€ã«ã®æåŸã«çœ®ãããã«ãŠã³ã¿ãŒèªäœãããã«ãããŸãã ãã¹ãŠã®å®æ°ã¯ããã®å®£èšã§ããŒãã«çŽæ¥å²ãåœãŠãããŸãã
Count7_v1_0 Count7_1 ( .en(1'b1), .load(Count7_1_load), .clock(clk), .reset(1'b0), .cnt(), .tc(Count7_1_tc)); defparam Count7_1.EnableSignal = 1; defparam Count7_1.LoadSignal = 1;
ãã®ã«ãŠã³ã¿ãŒãæ©èœãããããã«ã ã¢ã€ãã«ç¶æ ãçµäºããããã®è¿œå æ¡ä»¶ãèªåçã«è¿œå ããŸãã
åãããã¹ãïŒ
case(SM) Idle : begin LCD_E <= 0; if (( !F0empty ) == 1'b1) begin SM <= LoadF0 ; LCD_RS <= 0; end else if (( !F1empty &Count7_1_tc ) == 1'b1) begin SM <= LoadF1 ; LCD_RS <= 1; end end
ãã®æ¹æ³ã§è¿œå ãããã«ãŠã³ã¿ãŒã®APIã¯äœæãããªãããã ã¡ã€ã³é¢æ°ã«2ã€ã®éæ³ã®è¡ãè¿œå ããŸããããã¯ãéå»ã®ãããžã§ã¯ãã®APIã§èŠããã®ã®ã€ã¡ãŒãžãšäŒŒãŠããŸãïŒæåã®è¡ã¯ã¢ã«ãŠã³ãã®ããŒãå€ãåãããŒãã2çªç®ã¯ã«ãŠã³ã¿ãŒãéå§ããŸãïŒïŒ
*((uint8_t*)LCD4bit_1_Count7_1_Counter7__PERIOD_REG) = 0x20; *((uint8_t*)LCD4bit_1_Count7_1_Counter7__CONTROL_AUX_CTL_REG) |= 0x20; // Start
ã¢ãã©ã€ã¶ãŒã¯ãå€æŽãããå Žåã«é 延ãæããã§ããããšã瀺ããŸãã
LCDã«ã3ã€ã®æåãã¹ãŠããããŸãã
ããããå®éã®ããã°ã©ã ã§ã®æååºåã¯åãå ¥ããããŸããã FIFOã«è¿œå ããã ãã§ãªãŒããŒãããŒããŸããFIFOã空ã«ãªããŸã§åŸ ã¡ãŸã-ããã¯ãããã»ããµã³ã¢ã«å€§ããªé 延ãäœæããããšãæå³ããŸããããã»ããµã¯72 MHzã®åšæ³¢æ°ã§åäœããããŒã¿ã¯1 MHzã®åšæ³¢æ°ã§7ã8ã¯ããã¯ãµã€ã¯ã«åºåãããŸãããããã£ãŠãå®éã«ã¯ãããã¹ãã¯DMAã䜿çšããŠè¡šç€ºããå¿ èŠããããŸããããã¯ããèµ·åããŠå¿ããŠããŸã£ããååã圹ç«ã€å Žæã§ããã¿ã€ãã³ã°å³ã®ãã¹ãŠã®é 延ã¯UDBã«ãã£ãŠçæãããDMAã³ã³ãããŒã©ãŒã¯ããŒã¿ãåä¿¡ããããã®FIFOã®æºåã決å®ããŸããããã»ããµã³ã¢ã¯ãã¡ã¢ãªã«ã©ã€ã³ã圢æããDMAãæ§æããããã«ã®ã¿å¿ èŠã§ãããã®åŸãLCDãžã®åºåãæ°ã«ããã«ä»ã®ã¿ã¹ã¯ãå®è¡ã§ããŸãã
次ã®ã³ãŒããè¿œå ããŸãã
static const char line[] = "This is a line"; /* Defines for DMA_D */ #define DMA_D_BYTES_PER_BURST 1 #define DMA_D_REQUEST_PER_BURST 1 /* Variable declarations for DMA_D */ /* Move these variable declarations to the top of the function */ uint8 DMA_D_Chan; uint8 DMA_D_TD[1]; /* DMA Configuration for DMA_D */ DMA_D_Chan = DMA_D_DmaInitialize(DMA_D_BYTES_PER_BURST, DMA_D_REQUEST_PER_BURST, HI16(line), HI16(LCD4bit_1_LCD_DP__F1_REG)); DMA_D_TD[0] = CyDmaTdAllocate(); CyDmaTdSetConfiguration(DMA_D_TD[0], sizeof(line)-1, CY_DMA_DISABLE_TD, CY_DMA_TD_INC_SRC_ADR); CyDmaTdSetAddress(DMA_D_TD[0], LO16((uint32)line), LO16((uint32)LCD4bit_1_LCD_DP__F1_REG)); CyDmaChSetInitialTd(DMA_D_Chan, DMA_D_TD[0]); CyDmaChEnable(DMA_D_Chan, 1);
ç»é¢ã«ã¯æ¬¡ã®ãã®ããããŸãã
ãããã«
ååæã§ãããå®éã®ã¿ã¹ã¯ã«è¿ãäŸã§ã¯ã代æ¿ã¡ã«ããºã ã§ããDatapath Config Toolã䜿çšããŠãUDBã®ã³ãŒããéçºããã¡ã«ããºã ãç¿åŸããŸããããã®ã¡ã«ããºã ã¯ãUDBãšãã£ã¿ãŒãšã¯ç°ãªããå®å šã«ãã¹ãŠã®UDB管çæ©èœãžã®ã¢ã¯ã»ã¹ãæäŸããŸãããUDBãšãã£ã¿ãŒã䜿çšããå Žåãããäœæ¥ãè€éã«ãªããŸããããã§ãããã®èšäºã®èè ãææ¡ããæ¹æ³ã§ã¯ãã³ãŒãããŒãããäœæããã®ã§ã¯ãªããåãUDBãšãã£ã¿ãŒã§äœæãããè£å©ã³ãŒãã«äŸåããŠåçŽã«äœæã§ããŸãã
èšäºãæžãããšãã«åŸããããã¹ããããžã§ã¯ãã¯ããã§åãããšãã§ããŸãã