{"id":2871,"date":"2011-03-07T14:11:13","date_gmt":"2011-03-07T05:11:13","guid":{"rendered":"http:\/\/mkusunoki.net\/?p=2871"},"modified":"2013-12-06T22:03:00","modified_gmt":"2013-12-06T13:03:00","slug":"picoblaze-%e3%81%a7%e3%82%ad%e3%83%a3%e3%83%a9%e3%82%af%e3%82%bf%e6%b6%b2%e6%99%b6%e8%a1%a8%e7%a4%ba","status":"publish","type":"post","link":"https:\/\/mkusunoki.net\/?p=2871","title":{"rendered":"PicoBlaze \u3067\u30ad\u30e3\u30e9\u30af\u30bf\u6db2\u6676\u8868\u793a"},"content":{"rendered":"<p><a href=\"http:\/\/mkusunoki.net\/?attachment_id=413\" rel=\"attachment wp-att-413\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/mkusunoki.net\/wp\/wp-content\/uploads\/2011\/03\/S3ASK_picoled.jpg\" alt=\"\" title=\"S3ASK_picoled\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-413\" srcset=\"https:\/\/mkusunoki.net\/wp\/wp-content\/uploads\/2011\/03\/S3ASK_picoled.jpg 800w, https:\/\/mkusunoki.net\/wp\/wp-content\/uploads\/2011\/03\/S3ASK_picoled-320x240.jpg 320w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><\/p>\n<p>\n\u4eca\u56de\u306f\u3001Spartan-3A \u306e PicoBlaze \u3067\u30ad\u30e3\u30e9\u30af\u30bf\u6db2\u6676\u306e\u8868\u793a\u3092\u884c\u306a\u3044\u307e\u3057\u305f\u3002<br \/>\n\u3068\u8a00\u3063\u3066\u3082\u4eca\u56de\u306f\u3001fpga \u30dd\u30fc\u30c8\u306e\u5165\u51fa\u529b\u52d5\u4f5c\u304c\u3046\u307e\u304f\u3044\u304b\u306a\u304b\u3063\u305f\u306e\u3067<br \/>\nBUSY\u30c1\u30a7\u30c3\u30af\u306f\u3057\u306a\u3044\u3067\u3001\u6642\u9593\u5f85\u3061\u3057\u3066\u8868\u793a\u3055\u305b\u3066\u307e\u3059\u3002\n<\/p>\n<p>\n\u4f55\u306e\u30d2\u30cd\u30ea\u3082\u7121\u3044\u306e\u3067\u3001\u305d\u306e\u307e\u307e\u30bd\u30fc\u30b9\u63b2\u8f09\u3067\u3057\u3002\u30de\u30a4\u30b3\u30f3\u306e\u30a2\u30bb\u30f3\u30d6\u30e9\u3068Verilog\u3067\u3059\u3002\n<\/p>\n<p>\nPicoBlaze \u306e\u30bd\u30fc\u30b9\n<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nCONSTANT        LCD_DATA,       01      ;\r\nCONSTANT        LCD_CTRL_E,     02      ;\r\nCONSTANT        LCD_CTRL_RS,    03      ; 0=Command, 1=Data\r\nCONSTANT        LCD_CTRL_RW,    04      ; 0=write, 1=read\r\nCONSTANT        LED,            05      ; LED port\r\n\r\n                ADDRESS 000\r\nINIT00:\r\n                ENABLE  INTERRUPT\r\n                CALL    LCD_INIT\r\n\r\nMAIN00:         LOAD    s4, 50          ; P\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 69          ; i\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 63          ; c\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 6F          ; o\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 42          ; B\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 6C          ; l\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 61          ; a\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 7A          ; z\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 65          ; e\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 21          ; !\r\n                CALL    LCD_PUTCH\r\n                LOAD    s4, 00\r\nMAIN90:\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                OUTPUT  s4, LED        ; LED \u30c1\u30ab\u30c1\u30ab\r\n                ADD     s4, 01\r\n                JUMP    MAIN90\r\n\r\n\r\nLCD_INIT:       CALL    DELAY20ms\r\n                CALL    DELAY20ms\r\n                LOAD    s4, 30\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY20ms\r\n                LOAD    s4, 30\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY1ms\r\n                LOAD    s4, 30\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY1ms\r\n                LOAD    s4, 38\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY100us\r\n                LOAD    s4, 0F\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY100us\r\n                LOAD    s4, 06\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY100us\r\n                LOAD    s4, 01\r\n                CALL    LCD_PUTCMD\r\n                CALL    DELAY100us\r\n                RETURN\r\n\r\nLCD_PUTCH:      CALL    LCD_RS_1\r\n                CALL    LCD_RW_0\r\n                OUTPUT  s4, LCD_DATA\r\n                CALL    LCD_E\r\n                RETURN\r\n\r\nLCD_PUTCMD:     CALL    LCD_RS_0\r\n                CALL    LCD_RW_0\r\n                OUTPUT  s4, LCD_DATA\r\n                CALL    LCD_E\r\n                RETURN\r\n\r\nLCD_RS_0:       LOAD    s0, 00\r\n                JUMP    LCD_RS\r\nLCD_RS_1:       LOAD    s0, 01\r\nLCD_RS:         OUTPUT  s0, LCD_CTRL_RS\r\n                RETURN\r\n\r\nLCD_RW_0:       LOAD    s0, 00\r\n                JUMP    LCD_RW\r\nLCD_RW_1:       LOAD    s0, 01\r\nLCD_RW:         OUTPUT  s0, LCD_CTRL_RW\r\n                RETURN\r\n\r\nLCD_E:          LOAD    s0, 01\r\n                OUTPUT  s0, LCD_CTRL_E\r\n                CALL    DELAY1us\r\n                LOAD    s0, 00\r\n                OUTPUT  s0, LCD_CTRL_E\r\n                CALL    DELAY1ms\r\n                RETURN\r\n\r\n; ------------------------------------------------------------------------------\r\n; -- \u6642\u9593\u5f85\u3061\r\n; -- 50Mhz = 20ns\r\n; -- 1\u547d\u4ee4 2\u30af\u30ed\u30c3\u30af = 40ns\r\n; -- s0,s1,s2,s3 \r\n; -- \r\n; ------------------------------------------------------------------------------\r\nDELAY1us:       LOAD    s0, 16\r\nDELAY1us00:     SUB     s0, 01\r\n                JUMP    NZ, DELAY1us00\r\n                RETURN\r\n\r\nDELAY100us:     LOAD    s1, 64\r\nDELAY100us00:   CALL    DELAY1us\r\n                SUB     s1, 01\r\n                JUMP    NZ, DELAY100us00\r\n                RETURN\r\n\r\nDELAY1ms:       LOAD     s2, 0A\r\nDELAY1ms00:     CALL    DELAY100us\r\n                SUB     s2, 01\r\n                JUMP    NZ, DELAY1ms00\r\n                RETURN\r\n\r\nDELAY20ms:      LOAD    s3, 14\r\nDELAY20ms00:    CALL    DELAY1ms\r\n                SUB     s3, 01\r\n                JUMP    NZ, DELAY20ms00\r\n                RETURN\r\n\r\n; ------------------------------------------------------------------------------\r\n; -- \u5272\u308a\u8fbc\u307f\u30eb\u30fc\u30c1\u30f3\r\n; -- \r\n; ------------------------------------------------------------------------------\r\nINTERRUPT:\r\n;               &amp;lt;&lt;\u30b3\u30fc\u30c9&gt;&gt;\r\n                RETURNI ENABLE\r\n\r\n; ------------------------------------------------------------------------------\r\n; -- \u5272\u308a\u8fbc\u307f\u30d9\u30af\u30bf\r\n; -- \r\n; ------------------------------------------------------------------------------\r\n                ADDRESS 3FF\r\n                JUMP    INTERRUPT\r\n<\/pre>\n<p>\nverilog \u306e\u30bd\u30fc\u30b9\n<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n`timescale 1ns \/ 1ps\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/ Company: \r\n\/\/ Engineer: \r\n\/\/ \r\n\/\/ Create Date:    10:28:22 04\/24\/2009 \r\n\/\/ Design Name: \r\n\/\/ Module Name:    picolcd \r\n\/\/ Project Name: \r\n\/\/ Target Devices: \r\n\/\/ Tool versions: \r\n\/\/ Description: \r\n\/\/\r\n\/\/ Dependencies: \r\n\/\/\r\n\/\/ Revision: \r\n\/\/ Revision 0.01 - File Created\r\n\/\/ Additional Comments: \r\n\/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n`default_nettype none\r\n\r\nmodule picolcd (\r\n    input   wire CLK_50MHZ,\r\n    output  wire LCD_E,\r\n    output  wire LCD_RS,\r\n    output  wire LCD_RW,\r\n    output  wire &#x5B;7:0] LCD_DB,\r\n    output  wire &#x5B;7:0] LED\r\n);\r\n\r\nwire RESET;     \/\/ DCM\u306eLOCKED_OUT\u3092\u30ed\u30b8\u30ab\u30eb\u306a\u30ea\u30bb\u30c3\u30c8\u306b\u3059\u308b\u306e\u304c\u3044\u3044\r\nwire DCM01_CLKIN_IBUF_OUT;\r\nwire DCM01_CLK0_OUT;\r\nwire DCM01_LOCKED_OUT;\r\nwire &#x5B;9:0]\tCPU00_ADDRESS;\r\nwire &#x5B;17:0]\tCPU00_INSTRUCTION;\r\nwire &#x5B;7:0]\tCPU00_PORT_ID;\r\nwire &#x5B;7:0]\tCPU00_IN_PORT;\r\nwire &#x5B;7:0]\tCPU00_OUT_PORT;\r\nwire CPU00_READ_STROBE;\r\nwire CPU00_WRITE_STROBE;\r\nwire CPU00_INTERRUPT;\r\nwire CPU00_INTERRUPT_ACK;\r\n\r\ngenerate_reset_pulse generate_reset_pulse (\r\n    .clock(DCM01_CLKIN_IBUF_OUT),\r\n    .reset_pulse(RESET)\r\n);\r\n\r\ndcm01 DCM01 (\r\n\t.CLKIN_IN(CLK_50MHZ), \r\n\t.RST_IN(RESET), \r\n\t.CLKIN_IBUFG_OUT(DCM01_CLKIN_IBUF_OUT), \r\n\t.CLK0_OUT(DCM01_CLK0_OUT),\r\n\t.LOCKED_OUT(DCM01_LOCKED_OUT)\r\n);\r\n\r\nkcpsm3 CPU00 (\r\n \t.address(CPU00_ADDRESS),\r\n \t.instruction(CPU00_INSTRUCTION),\r\n \t.port_id(CPU00_PORT_ID),\r\n \t.write_strobe(CPU00_WRITE_STROBE),\r\n \t.out_port(CPU00_OUT_PORT),\r\n \t.read_strobe(CPU00_READ_STROBE),\r\n \t.in_port(CPU00_IN_PORT),\r\n \t.interrupt(CPU00_INTERRUPT),\r\n \t.interrupt_ack(CPU00_INTERRUPT_ACK),\r\n \t.reset(RESET),\r\n \t.clk(DCM01_CLK0_OUT)\r\n);\r\n\r\nlcd CPU00ROM (\r\n\t.address(CPU00_ADDRESS),\r\n\t.instruction(CPU00_INSTRUCTION),\r\n\t.clk(DCM01_CLK0_OUT)\r\n);\r\n\r\nlcdport_out lcd_port_out (\r\n    .we(CPU00_WRITE_STROBE),\r\n    .port(CPU00_PORT_ID),\r\n    .data(CPU00_OUT_PORT),\r\n    .lcd_data(LCD_DB),\r\n    .lcd_e(LCD_E),\r\n    .lcd_rs(LCD_RS),\r\n    .lcd_rw(LCD_RW),\r\n    .led(LED)\r\n);\r\n\r\nendmodule\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/  Generate 1shot pulse \r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nmodule generate_reset_pulse (\r\n    input wire clock,\r\n    output wire reset_pulse\r\n);\r\n\r\nSRL16 #(.INIT(16&#039;h00FF)) SRL16_inst (\r\n    .Q(reset_pulse),\r\n    .A0(1&#039;b1),\r\n    .A1(1&#039;b1),\r\n    .A2(1&#039;b1),\r\n    .A3(1&#039;b1),\r\n    .CLK(clock),\r\n    .D(1&#039;b0)\r\n);\r\n\r\nendmodule\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/  CPU00(PicoBlaze)  ADDRESS DECODER\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nmodule lcdport_out (\r\n    input wire we,\r\n    input wire &#x5B;7:0] port,\r\n    input wire &#x5B;7:0] data,\r\n    output reg &#x5B;7:0] lcd_data,\r\n    output reg lcd_e,\r\n    output reg lcd_rs,\r\n    output reg lcd_rw,\r\n    output reg &#x5B;7:0] led\r\n);\r\nalways @(posedge we)\r\nbegin\r\n    case(port)\r\n        8&#039;h01:\tlcd_data = data;\r\n        8&#039;h02:\tlcd_e  = data&#x5B;0];\r\n        8&#039;h03:\tlcd_rs = data&#x5B;0];\r\n        8&#039;h04:\tlcd_rw = data&#x5B;0];\r\n        8&#039;h05:  led = data;\r\n    endcase\t\r\nend\r\n\r\nendmodule\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u56de\u306f\u3001Spartan-3A \u306e PicoBlaze \u3067\u30ad\u30e3\u30e9\u30af\u30bf\u6db2\u6676\u306e\u8868\u793a\u3092\u884c\u306a\u3044\u307e\u3057\u305f\u3002 \u3068\u8a00\u3063\u3066\u3082\u4eca\u56de\u306f\u3001fpga \u30dd\u30fc\u30c8\u306e\u5165\u51fa\u529b\u52d5\u4f5c\u304c\u3046\u307e\u304f\u3044\u304b\u306a\u304b\u3063\u305f\u306e\u3067 BUSY\u30c1\u30a7\u30c3\u30af\u306f\u3057\u306a\u3044\u3067\u3001\u6642\u9593\u5f85\u3061\u3057\u3066\u8868\u793a\u3055\u305b\u3066\u307e\u3059 &hellip; <a href=\"https:\/\/mkusunoki.net\/?p=2871\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;PicoBlaze \u3067\u30ad\u30e3\u30e9\u30af\u30bf\u6db2\u6676\u8868\u793a&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7],"tags":[201,202,44],"class_list":["post-2871","post","type-post","status-publish","format-standard","hentry","category-kousaku","tag-fpga","tag-picobraze","tag-xilinx-2"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mkusunoki.net\/index.php?rest_route=\/wp\/v2\/posts\/2871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mkusunoki.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mkusunoki.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mkusunoki.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mkusunoki.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2871"}],"version-history":[{"count":0,"href":"https:\/\/mkusunoki.net\/index.php?rest_route=\/wp\/v2\/posts\/2871\/revisions"}],"wp:attachment":[{"href":"https:\/\/mkusunoki.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mkusunoki.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mkusunoki.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}