Added some lcd outputs to controller

This commit is contained in:
T-moe
2016-06-03 18:11:32 +02:00
parent 88b27eb919
commit 59bed5c814
4 changed files with 176 additions and 117 deletions

View File

@@ -1,31 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<symbol version="7" name="controller">
<symboltype>BLOCK</symboltype>
<timestamp>2016-6-3T12:59:50</timestamp>
<pin polarity="Input" x="0" y="-352" name="clk" />
<pin polarity="Input" x="0" y="-288" name="rst" />
<pin polarity="Input" x="0" y="-32" name="enc_err" />
<pin polarity="Output" x="432" y="-352" name="freq_out(16:0)" />
<pin polarity="Input" x="0" y="-224" name="enc_btn" />
<pin polarity="Input" x="0" y="-96" name="enc_ce" />
<pin polarity="Input" x="0" y="-160" name="enc_updown" />
<timestamp>2016-6-3T16:4:48</timestamp>
<pin polarity="Input" x="0" y="-416" name="clk" />
<pin polarity="Input" x="0" y="-352" name="rst" />
<pin polarity="Input" x="0" y="-96" name="enc_err" />
<pin polarity="Input" x="0" y="-32" name="lcd_busy" />
<pin polarity="Output" x="432" y="-416" name="lcd_newchar" />
<pin polarity="Output" x="432" y="-32" name="freq_out(16:0)" />
<pin polarity="Input" x="0" y="-224" name="enc_updown" />
<pin polarity="Input" x="0" y="-160" name="enc_ce" />
<pin polarity="Input" x="0" y="-288" name="enc_btn" />
<pin polarity="Output" x="432" y="-352" name="lcd_data(7:0)" />
<graph>
<attrtext style="alignment:BCENTER;fontsize:56;fontname:Arial" attrname="SymbolName" x="216" y="-392" type="symbol" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-352" type="pin clk" />
<rect width="304" x="64" y="-448" height="448" />
<attrtext style="alignment:BCENTER;fontsize:56;fontname:Arial" attrname="SymbolName" x="216" y="-456" type="symbol" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-416" type="pin clk" />
<line x2="0" y1="-416" y2="-416" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-352" type="pin rst" />
<line x2="0" y1="-352" y2="-352" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-288" type="pin rst" />
<line x2="0" y1="-288" y2="-288" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-32" type="pin enc_err" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-96" type="pin enc_err" />
<line x2="0" y1="-96" y2="-96" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-32" type="pin lcd_busy" />
<line x2="0" y1="-32" y2="-32" x1="64" />
<attrtext style="alignment:RIGHT;fontsize:24;fontname:Arial" attrname="PinName" x="360" y="-352" type="pin freq_out(16:0)" />
<attrtext style="alignment:RIGHT;fontsize:24;fontname:Arial" attrname="PinName" x="360" y="-416" type="pin lcd_newchar" />
<line x2="432" y1="-416" y2="-416" x1="368" />
<attrtext style="alignment:RIGHT;fontsize:24;fontname:Arial" attrname="PinName" x="360" y="-32" type="pin freq_out(16:0)" />
<rect width="64" x="368" y="-44" height="24" />
<line x2="432" y1="-32" y2="-32" x1="368" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-224" type="pin enc_updown" />
<line x2="0" y1="-224" y2="-224" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-160" type="pin enc_ce" />
<line x2="0" y1="-160" y2="-160" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-288" type="pin enc_btn" />
<line x2="0" y1="-288" y2="-288" x1="64" />
<attrtext style="alignment:RIGHT;fontsize:24;fontname:Arial" attrname="PinName" x="360" y="-352" type="pin lcd_data(7:0)" />
<rect width="64" x="368" y="-364" height="24" />
<line x2="432" y1="-352" y2="-352" x1="368" />
<rect width="304" x="64" y="-384" height="384" />
<line x2="0" y1="-224" y2="-224" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="76" y="-224" type="pin enc_btn" />
<line x2="0" y1="-96" y2="-96" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-96" type="pin enc_ce" />
<line x2="0" y1="-160" y2="-160" x1="64" />
<attrtext style="fontsize:24;fontname:Arial" attrname="PinName" x="72" y="-160" type="pin enc_updown" />
</graph>
</symbol>

View File

@@ -36,49 +36,75 @@ entity controller is
enc_ce : in STD_LOGIC;
enc_btn: in STD_LOGIC;
enc_err : in STD_LOGIC;
lcd_busy: in STD_LOGIC;
lcd_data: out unsigned(7 downto 0);
lcd_newchar: out STD_LOGIC;
freq_out : out unsigned (16 downto 0));
end controller;
architecture Behavioral of controller is
signal freq_reg, freq_next : unsigned(16 downto 0) := to_unsigned(1000,17);
signal digpos_reg, digpos_next : unsigned(2 downto 0) := to_unsigned(0,3);
--digitnr which is currently edited 0-4
signal digpos_reg, digpos_next : unsigned(2 downto 0) := (others => '0');
-- for edge detection on btn
signal btn_old_reg, btn_old_next : std_logic := '0';
-- array 5x 4bit(0-9)
type storage_digit is array (4 downto 0) of unsigned (3 downto 0);
signal digit_reg, digit_next : storage_digit := (others => (others => '0'));
signal charcnt_reg, charcnt_next : unsigned(15 downto 0) := (others => '0');
signal lcd_newchar_reg,lcd_newchar_next : std_logic := '0';
signal lcd_data_reg, lcd_data_next: unsigned(7 downto 0) :=(others => '0');
type storage is array (4 downto 0) of unsigned (16 downto 0);
constant bases : storage := (to_unsigned(1,17),to_unsigned(10,17),
to_unsigned(100,17),to_unsigned(1000,17),
to_unsigned(10000,17));
signal digpos_base : unsigned(16 downto 0);
begin
proc1: process(clk,rst)
begin
if(rst='1') then
freq_reg <= to_unsigned(1000,17);
digpos_reg <= to_unsigned(0,3);
digpos_reg <= (others => '0');
digit_reg <= (others => (others => '0'));
btn_old_reg <= '0';
charcnt_reg <= (others => '0');
lcd_newchar_reg <= '0';
lcd_data_reg <= (others => '0');
elsif(rising_edge(clk)) then
freq_reg <= freq_next;
digpos_reg <= digpos_next;
digit_reg <= digit_next;
btn_old_reg <= btn_old_next;
charcnt_reg <= charcnt_next;
lcd_newchar_reg<= lcd_newchar_next;
lcd_data_reg <= lcd_data_next;
end if;
end process proc1;
freq_out <= freq_reg;
digpos_base <= bases(to_integer(digpos_reg));
freq_out <= resize(digit_reg(0),17)
+ resize(digit_reg(1) * 10 ,17)
+ resize(digit_reg(2) * 100 ,17)
+ resize(digit_reg(3) * 1000,17)
+ resize(digit_reg(4) * 10000,17);
proc2: process(freq_reg,enc_updown,enc_ce,enc_err,enc_btn,digpos_reg,digpos_base,btn_old_reg)
lcd_data <= lcd_data_reg;
lcd_newchar <= lcd_newchar_reg;
proc2: process(digit_reg,enc_updown,enc_ce,enc_err,enc_btn,digpos_reg,btn_old_reg, charcnt_reg, lcd_busy, lcd_data_reg, lcd_newchar_reg)
begin
freq_next <= freq_reg;
digit_next <= digit_reg;
digpos_next <= digpos_reg;
btn_old_next <= enc_btn;
charcnt_next <= charcnt_reg;
lcd_newchar_next <= '0';
lcd_data_next <= lcd_data_reg;
if(enc_ce='1' and enc_err='0') then
if(enc_updown='1') then
freq_next <= freq_reg + digpos_base;
digit_next(to_integer(digpos_reg)) <= digit_reg(to_integer(digpos_reg)) + 1;
else
freq_next <= freq_reg - digpos_base;
digit_next(to_integer(digpos_reg)) <= digit_reg(to_integer(digpos_reg)) -1;
end if;
elsif(enc_btn ='1' and btn_old_reg='0') then
if(digpos_reg = to_unsigned(4,3)) then
@@ -87,6 +113,12 @@ begin
digpos_next <= digpos_reg + 1;
end if;
end if;
if(lcd_busy = '0' and charcnt_reg < 10) then
lcd_data_next <= to_unsigned(65,8);
lcd_newchar_next <= '1';
charcnt_next <= charcnt_reg + 1;
end if;
end process proc2;

View File

@@ -4,7 +4,7 @@ MODULE toplevel
SUBMODULE dds
INSTANCE XLXI_2
SUBMODULE controller
INSTANCE XLXI_42
INSTANCE XLXI_50
SUBMODULE rotary_dec
INSTANCE XLXI_43
SUBMODULE lcd_driver

View File

@@ -25,18 +25,20 @@
<signal name="LED0" />
<signal name="SW0" />
<signal name="SW1" />
<signal name="XLXN_63" />
<signal name="XLXN_64" />
<signal name="XLXN_65" />
<signal name="XLXN_68" />
<signal name="ROT_A" />
<signal name="ROT_B" />
<signal name="XLXN_68" />
<signal name="ROT_CENTER" />
<signal name="XLXN_77" />
<signal name="XLXN_78" />
<signal name="XLXN_79" />
<signal name="XLXN_70" />
<signal name="LCD_E" />
<signal name="LCD_RW" />
<signal name="LCD_RS" />
<signal name="LCD_DB(7:0)" />
<signal name="XLXN_92(7:0)" />
<signal name="XLXN_93" />
<port polarity="Input" name="CLK_50MHZ" />
<port polarity="Output" name="SPI_SCK" />
<port polarity="Output" name="DAC_CS" />
@@ -102,16 +104,20 @@
<line x2="32" y1="-64" y2="-64" x1="96" />
</blockdef>
<blockdef name="controller">
<timestamp>2016-6-3T12:59:50</timestamp>
<timestamp>2016-6-3T16:4:48</timestamp>
<rect width="304" x="64" y="-448" height="448" />
<line x2="0" y1="-416" y2="-416" x1="64" />
<line x2="0" y1="-352" y2="-352" x1="64" />
<line x2="0" y1="-288" y2="-288" x1="64" />
<line x2="0" y1="-96" y2="-96" x1="64" />
<line x2="0" y1="-32" y2="-32" x1="64" />
<line x2="432" y1="-416" y2="-416" x1="368" />
<rect width="64" x="368" y="-44" height="24" />
<line x2="432" y1="-32" y2="-32" x1="368" />
<line x2="0" y1="-224" y2="-224" x1="64" />
<line x2="0" y1="-160" y2="-160" x1="64" />
<line x2="0" y1="-288" y2="-288" x1="64" />
<rect width="64" x="368" y="-364" height="24" />
<line x2="432" y1="-352" y2="-352" x1="368" />
<rect width="304" x="64" y="-384" height="384" />
<line x2="0" y1="-224" y2="-224" x1="64" />
<line x2="0" y1="-96" y2="-96" x1="64" />
<line x2="0" y1="-160" y2="-160" x1="64" />
</blockdef>
<blockdef name="rotary_dec">
<timestamp>2016-5-23T16:56:27</timestamp>
@@ -191,41 +197,44 @@
<blockpin signalname="SW0" name="I" />
<blockpin signalname="LED0" name="O" />
</block>
<block symbolname="controller" name="XLXI_42">
<blockpin signalname="CLK_50MHZ" name="clk" />
<blockpin signalname="XLXN_68" name="rst" />
<blockpin signalname="XLXN_63" name="enc_err" />
<blockpin signalname="FREQ(16:0)" name="freq_out(16:0)" />
<blockpin signalname="ROT_CENTER" name="enc_btn" />
<blockpin signalname="XLXN_64" name="enc_ce" />
<blockpin signalname="XLXN_65" name="enc_updown" />
</block>
<block symbolname="rotary_dec" name="XLXI_43">
<blockpin signalname="CLK_50MHZ" name="clk" />
<blockpin signalname="ROT_A" name="A" />
<blockpin signalname="ROT_B" name="B" />
<blockpin signalname="XLXN_65" name="up_down" />
<blockpin signalname="XLXN_64" name="ce" />
<blockpin signalname="XLXN_63" name="error" />
<blockpin signalname="XLXN_77" name="up_down" />
<blockpin signalname="XLXN_78" name="ce" />
<blockpin signalname="XLXN_79" name="error" />
</block>
<block symbolname="gnd" name="XLXI_44">
<blockpin signalname="XLXN_68" name="G" />
</block>
<block symbolname="controller" name="XLXI_50">
<blockpin signalname="CLK_50MHZ" name="clk" />
<blockpin signalname="XLXN_68" name="rst" />
<blockpin signalname="XLXN_79" name="enc_err" />
<blockpin name="lcd_busy" />
<blockpin signalname="XLXN_93" name="lcd_newchar" />
<blockpin signalname="FREQ(16:0)" name="freq_out(16:0)" />
<blockpin signalname="XLXN_77" name="enc_updown" />
<blockpin signalname="XLXN_78" name="enc_ce" />
<blockpin signalname="ROT_CENTER" name="enc_btn" />
<blockpin signalname="XLXN_92(7:0)" name="lcd_data(7:0)" />
</block>
<block symbolname="gnd" name="XLXI_46">
<blockpin signalname="XLXN_70" name="G" />
</block>
<block symbolname="lcd_driver" name="XLXI_45">
<blockpin signalname="CLK_50MHZ" name="clk" />
<blockpin signalname="XLXN_70" name="reset" />
<blockpin name="new_character" />
<blockpin signalname="XLXN_93" name="new_character" />
<blockpin name="new_pos" />
<blockpin name="auto_incr_cursor" />
<blockpin name="data(7:0)" />
<blockpin signalname="XLXN_92(7:0)" name="data(7:0)" />
<blockpin signalname="LCD_E" name="lcd_en" />
<blockpin signalname="LCD_RW" name="lcd_rw" />
<blockpin signalname="LCD_RS" name="lcd_rs" />
<blockpin signalname="LCD_DB(7:0)" name="lcd_db(7:0)" />
</block>
<block symbolname="gnd" name="XLXI_46">
<blockpin signalname="XLXN_70" name="G" />
</block>
</netlist>
<sheet sheetnum="1" width="5440" height="3520">
<instance x="2256" y="1520" name="XLXI_2" orien="R0">
@@ -286,8 +295,8 @@
</branch>
<branch name="FREQ(16:0)">
<attrtext style="alignment:SOFT-LEFT;fontsize:28;fontname:Arial" attrname="Name" x="2075" y="1424" type="branch" />
<wire x2="1904" y1="1088" y2="1088" x1="1664" />
<wire x2="1904" y1="1088" y2="1424" x1="1904" />
<wire x2="1904" y1="1056" y2="1056" x1="1536" />
<wire x2="1904" y1="1056" y2="1424" x1="1904" />
<wire x2="2256" y1="1424" y2="1424" x1="1904" />
</branch>
<instance x="3392" y="1168" name="XLXI_14" orien="R0" />
@@ -335,15 +344,6 @@
<wire x2="1600" y1="1568" y2="1568" x1="1504" />
</branch>
<instance x="1600" y="1680" name="XLXI_27" orien="R0" />
<branch name="XLXN_63">
<wire x2="1232" y1="1408" y2="1408" x1="912" />
</branch>
<branch name="XLXN_64">
<wire x2="1232" y1="1344" y2="1344" x1="912" />
</branch>
<branch name="XLXN_65">
<wire x2="1232" y1="1280" y2="1280" x1="912" />
</branch>
<iomarker fontsize="28" x="2224" y="1360" name="CLK_50MHZ" orien="R180" />
<iomarker fontsize="28" x="3392" y="1216" name="SPI_SCK" orien="R0" />
<iomarker fontsize="28" x="3392" y="1280" name="DAC_CS" orien="R0" />
@@ -357,68 +357,85 @@
<iomarker fontsize="28" x="1872" y="1648" name="LED0" orien="R0" />
<iomarker fontsize="28" x="1504" y="1568" name="SW1" orien="R180" />
<iomarker fontsize="28" x="1504" y="1504" name="SW0" orien="R180" />
<instance x="1232" y="1440" name="XLXI_42" orien="R0">
</instance>
<branch name="CLK_50MHZ">
<wire x2="1216" y1="880" y2="880" x1="1152" />
<wire x2="1216" y1="880" y2="1088" x1="1216" />
<wire x2="1232" y1="1088" y2="1088" x1="1216" />
<wire x2="1088" y1="464" y2="464" x1="1024" />
<wire x2="1088" y1="464" y2="672" x1="1088" />
<wire x2="1104" y1="672" y2="672" x1="1088" />
</branch>
<iomarker fontsize="28" x="1152" y="880" name="CLK_50MHZ" orien="R180" />
<instance x="528" y="1440" name="XLXI_43" orien="R0">
</instance>
<branch name="ROT_A">
<wire x2="528" y1="1344" y2="1344" x1="496" />
<wire x2="448" y1="928" y2="928" x1="368" />
</branch>
<branch name="ROT_B">
<wire x2="528" y1="1408" y2="1408" x1="496" />
<wire x2="448" y1="992" y2="992" x1="368" />
</branch>
<branch name="CLK_50MHZ">
<wire x2="528" y1="1280" y2="1280" x1="496" />
<wire x2="448" y1="864" y2="864" x1="368" />
</branch>
<iomarker fontsize="28" x="496" y="1344" name="ROT_A" orien="R180" />
<iomarker fontsize="28" x="496" y="1408" name="ROT_B" orien="R180" />
<iomarker fontsize="28" x="496" y="1280" name="CLK_50MHZ" orien="R180" />
<instance x="1040" y="1120" name="XLXI_44" orien="R0" />
<instance x="912" y="704" name="XLXI_44" orien="R0" />
<branch name="XLXN_68">
<wire x2="1184" y1="992" y2="992" x1="1104" />
<wire x2="1184" y1="992" y2="1152" x1="1184" />
<wire x2="1232" y1="1152" y2="1152" x1="1184" />
<wire x2="1056" y1="576" y2="576" x1="976" />
<wire x2="1056" y1="576" y2="736" x1="1056" />
<wire x2="1104" y1="736" y2="736" x1="1056" />
</branch>
<branch name="ROT_CENTER">
<wire x2="1232" y1="1216" y2="1216" x1="1200" />
<wire x2="1104" y1="800" y2="800" x1="1072" />
</branch>
<iomarker fontsize="28" x="1200" y="1216" name="ROT_CENTER" orien="R180" />
<instance x="1856" y="2176" name="XLXI_45" orien="R0">
<iomarker fontsize="28" x="1024" y="464" name="CLK_50MHZ" orien="R180" />
<iomarker fontsize="28" x="368" y="928" name="ROT_A" orien="R180" />
<iomarker fontsize="28" x="368" y="992" name="ROT_B" orien="R180" />
<iomarker fontsize="28" x="368" y="864" name="CLK_50MHZ" orien="R180" />
<iomarker fontsize="28" x="1072" y="800" name="ROT_CENTER" orien="R180" />
<instance x="1104" y="1088" name="XLXI_50" orien="R0">
</instance>
<branch name="XLXN_77">
<wire x2="1104" y1="864" y2="864" x1="832" />
</branch>
<branch name="XLXN_78">
<wire x2="1104" y1="928" y2="928" x1="832" />
</branch>
<branch name="XLXN_79">
<wire x2="1104" y1="992" y2="992" x1="832" />
</branch>
<instance x="448" y="1024" name="XLXI_43" orien="R0">
</instance>
<branch name="CLK_50MHZ">
<wire x2="1856" y1="1824" y2="1824" x1="1824" />
<wire x2="2032" y1="464" y2="464" x1="2000" />
</branch>
<iomarker fontsize="28" x="1824" y="1824" name="CLK_50MHZ" orien="R180" />
<branch name="XLXN_70">
<wire x2="1696" y1="1888" y2="1920" x1="1696" />
<wire x2="1856" y1="1888" y2="1888" x1="1696" />
</branch>
<instance x="1632" y="2048" name="XLXI_46" orien="R0" />
<branch name="LCD_E">
<wire x2="2304" y1="1824" y2="1824" x1="2288" />
<wire x2="2320" y1="1824" y2="1824" x1="2304" />
<wire x2="2496" y1="464" y2="464" x1="2464" />
</branch>
<branch name="LCD_RW">
<wire x2="2304" y1="1920" y2="1920" x1="2288" />
<wire x2="2320" y1="1920" y2="1920" x1="2304" />
<wire x2="2496" y1="560" y2="560" x1="2464" />
</branch>
<branch name="LCD_RS">
<wire x2="2304" y1="2016" y2="2016" x1="2288" />
<wire x2="2320" y1="2016" y2="2016" x1="2304" />
<wire x2="2496" y1="656" y2="656" x1="2464" />
</branch>
<iomarker fontsize="28" x="2320" y="1824" name="LCD_E" orien="R0" />
<iomarker fontsize="28" x="2320" y="1920" name="LCD_RW" orien="R0" />
<iomarker fontsize="28" x="2320" y="2016" name="LCD_RS" orien="R0" />
<branch name="LCD_DB(7:0)">
<wire x2="2304" y1="2112" y2="2112" x1="2288" />
<wire x2="2320" y1="2112" y2="2112" x1="2304" />
<wire x2="2496" y1="752" y2="752" x1="2464" />
</branch>
<instance x="2032" y="816" name="XLXI_45" orien="R0">
</instance>
<iomarker fontsize="28" x="2000" y="464" name="CLK_50MHZ" orien="R180" />
<iomarker fontsize="28" x="2496" y="464" name="LCD_E" orien="R0" />
<iomarker fontsize="28" x="2496" y="560" name="LCD_RW" orien="R0" />
<iomarker fontsize="28" x="2496" y="656" name="LCD_RS" orien="R0" />
<iomarker fontsize="28" x="2496" y="752" name="LCD_DB(7:0)" orien="R0" />
<branch name="XLXN_92(7:0)">
<wire x2="1776" y1="736" y2="736" x1="1536" />
<wire x2="1776" y1="736" y2="784" x1="1776" />
<wire x2="2032" y1="784" y2="784" x1="1776" />
</branch>
<branch name="XLXN_93">
<wire x2="1984" y1="672" y2="672" x1="1536" />
<wire x2="2032" y1="592" y2="592" x1="1984" />
<wire x2="1984" y1="592" y2="672" x1="1984" />
</branch>
<instance x="1504" y="560" name="XLXI_46" orien="R0" />
<branch name="XLXN_70">
<wire x2="1568" y1="416" y2="432" x1="1568" />
<wire x2="1648" y1="416" y2="416" x1="1568" />
<wire x2="1648" y1="416" y2="528" x1="1648" />
<wire x2="2032" y1="528" y2="528" x1="1648" />
</branch>
<iomarker fontsize="28" x="2320" y="2112" name="LCD_DB(7:0)" orien="R0" />
</sheet>
</drawing>