標(biāo)題: VHDL語言設(shè)計(jì)基于計(jì)算機(jī)電路中時(shí)鐘脈沖原理的數(shù)字秒表 [打印本頁]
作者: weib 時(shí)間: 2019-1-8 16:25
標(biāo)題: VHDL語言設(shè)計(jì)基于計(jì)算機(jī)電路中時(shí)鐘脈沖原理的數(shù)字秒表
目錄
內(nèi)容摘要
一、概述
二、實(shí)驗(yàn)?zāi)康?/font>
三、實(shí)驗(yàn)原理
四、設(shè)計(jì)方案
五、設(shè)計(jì)方法論證
(1)將每個(gè)模塊生成電路元件,利用電路連接圖的方式
(2)利用元件例化的方法
六、設(shè)計(jì)過程
(1)計(jì)時(shí)、控制模塊
1)分頻器的設(shè)計(jì)
2)計(jì)數(shù)器的設(shè)計(jì)
(2)顯示模塊
1)掃描電路
2)七段譯碼
(3)報(bào)警器電路
(4)元件例化
七、波形仿真
八、設(shè)備驗(yàn)證
(1)引腳分配
(2)程序下載
(3)設(shè)備驗(yàn)證
九、設(shè)計(jì)心得及體會(huì)
內(nèi)容摘要在科技高度發(fā)展的今天,集成電路和計(jì)算機(jī)應(yīng)用得到了高速發(fā)展。尤其是計(jì)算機(jī)應(yīng)用的發(fā)展。它在人們?nèi)粘I钜阎饾u嶄露頭角。大多數(shù)電子產(chǎn)品多是由計(jì)算機(jī)電路組成,
如:手機(jī)、mp3等。而且將來的不久他們的身影將會(huì)更頻繁的出現(xiàn)在我們身邊。各種家用電器多會(huì)實(shí)現(xiàn)微電腦技術(shù)。電腦各部分在工作時(shí)多是一時(shí)間為基準(zhǔn)的。 本報(bào)告就是基于計(jì)算機(jī)電路的時(shí)鐘脈沖信號(hào)、狀態(tài)控制等原理,運(yùn)用EDA技術(shù)及VHDL語言設(shè)計(jì)出的數(shù)字秒表。秒表在很多領(lǐng)域充當(dāng)一個(gè)重要的角色。在各種比賽中對(duì)秒表的精確度要求很高,尤其是一些科學(xué)實(shí)驗(yàn),他們對(duì)時(shí)間精確度達(dá)到了幾納秒級(jí)別。
利用VHDL語言設(shè)計(jì)基于計(jì)算機(jī)電路中時(shí)鐘脈沖原理的數(shù)字秒表。該數(shù)字秒表能對(duì)0秒~59分59.99秒范圍進(jìn)行計(jì)時(shí),顯示最長(zhǎng)時(shí)間是59分59秒,超過該時(shí)間能夠進(jìn)行報(bào)警。計(jì)時(shí)精度達(dá)到10ms。設(shè)計(jì)了復(fù)位開關(guān)和啟停開關(guān)。復(fù)位開關(guān)可以在任何情況下使用,使用以后計(jì)時(shí)器清零,并做好下一次計(jì)時(shí)的準(zhǔn)備。
一、概述EDA是指以計(jì)算機(jī)為工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、智能化技術(shù)的最新成果而開發(fā)出的電子通用軟件包,它根據(jù)硬件描述語言VHDL完成的設(shè)計(jì)文件,自動(dòng)完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局布線及仿真,直至完成對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。隨著科技發(fā)展,在現(xiàn)代生活中,計(jì)數(shù)器應(yīng)用越來越廣泛。EDA技術(shù)的應(yīng)用引起電子產(chǎn)品即系統(tǒng)開發(fā)的革命性變革,在Quartus II環(huán)境下采用VHDL語言實(shí)現(xiàn),論述了基于VHDL語言在FPGA芯片的數(shù)字設(shè)計(jì)思想與實(shí)現(xiàn)過程。本設(shè)計(jì)是以VHDL語言為基礎(chǔ)的數(shù)字秒表。在數(shù)字秒表的程序中應(yīng)用了四個(gè)10進(jìn)制計(jì)數(shù)器和兩個(gè)6進(jìn)制計(jì)數(shù)器,以及報(bào)警器、選擇器和顯示譯碼器等。
電子設(shè)計(jì)自動(dòng)化技術(shù)EDA的發(fā)展給電子系統(tǒng)的設(shè)計(jì)帶來了革命性變化,EDA軟件設(shè)計(jì)工具,硬件描述語言,可編程邏輯器件(PLD)使得EDA技術(shù)的應(yīng)用走向普及。VHDL語言是EDA的關(guān)鍵技術(shù)之一,它采用自頂向下的設(shè)計(jì)方法,完成系統(tǒng)的整體設(shè)計(jì)。
二、實(shí)驗(yàn)?zāi)康?/font>通過本次課設(shè),加深對(duì)EDA技術(shù)設(shè)計(jì)的理解,學(xué)會(huì)用QuartusⅡ工具軟件設(shè)計(jì)基本電路,熟練掌握VHDL語言,為以后工作使用打下堅(jiān)實(shí)的基礎(chǔ)。
三、實(shí)驗(yàn)原理秒表工作原理和多少數(shù)字電子鐘大致一樣,不同的是秒表為0.01秒,整個(gè)秒表的時(shí)鐘信號(hào)輸入為50MHZ。所以,需要對(duì)時(shí)鐘信號(hào)進(jìn)行分頻 假設(shè)該秒表應(yīng)用場(chǎng)合小于1小時(shí),秒表的顯示格式為mm-ss-xx(mm表示分鐘:0~59;ss表示秒:0~59;xx表示百分之一秒:0~99)。
利用試驗(yàn)箱產(chǎn)生的CLK沖激作為時(shí)鐘信號(hào)的基準(zhǔn)信號(hào),通過顯示和計(jì)時(shí)模塊在試驗(yàn)箱的LED顯示。
四、設(shè)計(jì)方案 本系統(tǒng)設(shè)計(jì)采用自頂向下的設(shè)計(jì)方案,系統(tǒng)的整體組裝設(shè)計(jì)原理圖如圖1所示,它主要由控制模塊、分頻模塊,計(jì)時(shí)模塊、顯示模塊和報(bào)警模塊五部分組成。各模塊分別完成計(jì)時(shí)過程的控制功能、計(jì)時(shí)功能與顯示功能。
計(jì)時(shí)控制模塊主要是對(duì)計(jì)時(shí)過程進(jìn)行控制。計(jì)時(shí)控制模塊可以由兩個(gè)按鈕開關(guān)來完成秒表的啟動(dòng),停止和復(fù)位。
計(jì)時(shí)模塊實(shí)現(xiàn)的是計(jì)時(shí)功能,及時(shí)的方法是對(duì)標(biāo)準(zhǔn)時(shí)鐘脈沖計(jì)數(shù)。由于秒表的計(jì)時(shí)范圍是0秒~59分59.99秒,所以計(jì)數(shù)器可以由四個(gè)十進(jìn)制計(jì)數(shù)器和兩個(gè)六進(jìn)制計(jì)數(shù)器構(gòu)成,其中毫秒位,秒位和分位采用十進(jìn)制計(jì)數(shù)器來實(shí)現(xiàn),十秒位和十分位采用六進(jìn)制計(jì)數(shù)器。
計(jì)時(shí)顯示模塊是將計(jì)時(shí)值在LED七段數(shù)碼管顯示出來。
當(dāng)計(jì)時(shí)達(dá)60分鐘后,蜂鳴器鳴響10聲
最終底層文件生成設(shè)計(jì)實(shí)體可采用兩種方式
五、設(shè)計(jì)方法論證
(1)將每個(gè)模塊生成電路元件,利用電路連接圖的方式如圖2所示
圖2 電路原理圖
(2)利用元件例化的方法
六、設(shè)計(jì)過程
(1)計(jì)時(shí)、控制模塊1)分頻器的設(shè)計(jì):
由于本設(shè)計(jì)中需要用到精確的100Hz計(jì)時(shí)脈沖,因此分頻器的設(shè)計(jì)顯得尤為重要。考慮到實(shí)驗(yàn)箱上輸出頻率的限制及所產(chǎn)生及時(shí)脈沖的精度要求,采用由50MHz的時(shí)鐘脈沖經(jīng)過分頻器產(chǎn)生100Hz的計(jì)時(shí)脈沖。計(jì)時(shí)控制模塊的作用是將按鍵信號(hào)轉(zhuǎn)變?yōu)橛?jì)時(shí)器的控制信號(hào)。計(jì)時(shí)控制模塊可用兩個(gè)按鈕來完成秒表的啟動(dòng)、停止和復(fù)位,即啟動(dòng)/暫停鍵和清零鍵,由它們產(chǎn)生計(jì)數(shù)允許/保持和清零信號(hào)。K為啟動(dòng)/暫停鍵輸入信號(hào),K=0時(shí)表示按下,K=1時(shí)表示松開。
分頻器的設(shè)計(jì)程序源代碼如下:
ibrary ieee;
use ieee.std_logic_1164.all;
entity div is
port(clr,clk: in std_logic;
q: buffer std_logic);
end div;
architecture a of div is
signal count:integer range 0 to 499999; --設(shè)置定時(shí)范圍
begin
process(clr,clk)
begin
if (clk'event and clk='1') then --當(dāng)計(jì)時(shí)脈沖上升沿出發(fā)
if clr='1' then --清零開關(guān)使能端
count<=0;
elsif count=499999 then
count<=0;
q<= not q;
else
count<=count+1;
end if;
end if;
end process;
end a;
生成的電路元件圖如圖3所示
圖3
2)計(jì)數(shù)器的設(shè)計(jì):
本實(shí)驗(yàn)需要六進(jìn)制計(jì)數(shù)器和十進(jìn)制計(jì)數(shù)器配合使用。計(jì)時(shí)方法和計(jì)算機(jī)一樣是對(duì)標(biāo)準(zhǔn)時(shí)鐘脈沖計(jì)數(shù)。計(jì)時(shí)模塊是由四個(gè)十進(jìn)制計(jì)數(shù)器和兩個(gè)六進(jìn)制計(jì)數(shù)器構(gòu)成的。其中毫秒位、十毫秒位、秒位和分位采用十進(jìn)制計(jì)數(shù)器,十秒位和十分位采用六進(jìn)制計(jì)數(shù)器。
library ieee; --六進(jìn)制計(jì)數(shù)器
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count6 is
port (clk,start,clr : in std_logic;
cout : out std_logic;
daout : out std_logic_vector(3 downto 0));--定義輸出數(shù)據(jù)范圍
end count6;
architecture two of count6 is
signal q0 : std_logic_vector(3 downto 0);
signal q1 : std_logic;
begin
process(clk,clr)
begin
if clr='1' then q0<="0000";
elsif ( clk'event and clk='1') then --當(dāng)上升沿來時(shí)動(dòng)作
if start='1' then
if q0="0101" then q0<="0000";q1<='1';--限制計(jì)數(shù)范圍
else q0<=q0+1;q1<='0'; --進(jìn)行計(jì)數(shù)
end if;
end if;
end if;
end process;
daout<= q0;
cout<=q1;
end two;
生成的電路元件圖如圖4所示
圖4
library ieee; --十進(jìn)制計(jì)數(shù)器
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count10 is
port (clk,start,clr : in std_logic;
cout : out std_logic;
daout : out std_logic_vector(3 downto 0));
end count10;
architecture one of count10 is
signal q0 : std_logic_vector(3 downto 0);
signal q1 : std_logic;
begin
process(clk,clr)
begin
if clr='1' then q0<="0000";
elsif ( clk'event and clk='1') then --判斷上升沿動(dòng)作
if start='1' then
if q0="1001" then q0<="0000";q1<='1'; --計(jì)數(shù)范圍限制在10
else q0<=q0+1;q1<='0'; --計(jì)數(shù)
end if;
end if;
end if;
end process;
daout<= q0;
cout<=q1;
end one;
生成的電路元件圖如圖5所示
圖5
(2)顯示模塊計(jì)時(shí)顯示電路的作用是將計(jì)時(shí)值在LED數(shù)碼管上顯示出來。計(jì)時(shí)電路產(chǎn)生的值經(jīng)過BCD七段譯碼后,驅(qū)動(dòng)LED數(shù)碼管。計(jì)時(shí)顯示電路的實(shí)現(xiàn)方案采用掃描顯示。其中包括選擇器和七段譯碼器。選擇器中包含了對(duì)數(shù)碼管的片選信號(hào)、位選信號(hào)及小數(shù)點(diǎn)的設(shè)置。
1)掃描電路數(shù)碼管動(dòng)態(tài)掃描就是以一定的頻率依次點(diǎn)亮多個(gè)數(shù)碼管的段位,只要頻率足夠大,人眼無法識(shí)別出,就會(huì)形成多個(gè)數(shù)碼管同時(shí)亮的現(xiàn)象。段選信號(hào)負(fù)責(zé)選擇哪個(gè)數(shù)碼管亮,位選信號(hào)負(fù)責(zé)控制該數(shù)碼管上亮的位置。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity seltime is
port(clr,clk: in bit;
dain0,dain1,dain2,dain3,dain4,dain5,dain6: in std_logic_vector(3 downto 0); --定義數(shù)據(jù)
sel: out std_logic_vector(3 downto 0);--段選信號(hào)
daout: out std_logic_vector(3 downto 0));--位選信號(hào)
end seltime;
architecture a of seltime is
signal temp:integer range 0 to 6;
begin
process(clk) --根據(jù)時(shí)鐘脈沖進(jìn)行動(dòng)作
begin
if (clr='1') then --清零使能端
daout<="0000";
sel<="0000";
temp<=0; --當(dāng)清零信號(hào)產(chǎn)生后將LED歸零
elsif (clk='1'and clk'event) then --當(dāng)時(shí)鐘上升沿時(shí)執(zhí)行
if temp=6 then temp<=0;
else temp<=temp + 1;
end if;
case temp is --控制LED
when 0=>sel<="0000";daout<=dain0;
when 1=>sel<="0001";daout<=dain1;
when 2=>sel<="0010";daout<=dain2;
when 3=>sel<="0011";daout<=dain3;
when 4=>sel<="0100";daout<=dain4;
when 5=>sel<="0101";daout<=dain5;
when 6=>sel<="0110";daout<=dain6;
end case;
end if;
end process;
end a;
生成的電路元件圖如圖6所示
圖6
2)七段譯碼數(shù)碼管是共陰極觸發(fā)亮度,七段數(shù)碼管由八位數(shù)據(jù)控制,數(shù)碼管首先從上到右,到下到左,到中間,最后到小數(shù)點(diǎn)分別標(biāo)記為a、b、c、d、e、f、g、dp八段其中小數(shù)點(diǎn)位DP為最高位,a段為最低位,要想顯示什么字符只需要使對(duì)應(yīng)的段發(fā)光即可。
library ieee;
use ieee.std_logic_1164.all;
entity deled is
port(num:in std_logic_vector(3 downto 0);
led:out std_logic_vector(6 downto 0));
end deled ;
architecture a of deled is
begin
process(num)
begin
case num is
when"0000"=>led<="0111111";--顯示0
when"0001"=>led<="0000110";--顯示1
when"0010"=>led<="1011011";--顯示2
when"0011"=>led<="1001111";--顯示3
when"0100"=>led<="1100110";--顯示4
when"0101"=>led<="1101101";--顯示5
when"0110"=>led<="1111101";--顯示6
when"0111"=>led<="0100111";--顯示7
when"1000"=>led<="1111111";--顯示8
when"1001"=>led<="1101111";--顯示9
when others=>led<="0000000";--其他情況下為0
end case;
end process;
end a;
生成的電路元件圖如圖7所示
圖7
(3)報(bào)警器電路報(bào)警模塊的設(shè)計(jì)是利用蜂鳴器的發(fā)聲原理。當(dāng)計(jì)數(shù)器計(jì)滿59分鐘后會(huì)產(chǎn)生進(jìn)位信號(hào),在蜂鳴器的一端輸入高電平時(shí)蜂鳴器發(fā)生,產(chǎn)生報(bào)警聲。
源代碼:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity alarm is
port(clk,I:in std_logic;
q:out std_logic --報(bào)警輸出
);
end alarm;
architecture ar of alarm is
signal n:integer range 0 to 9;
signal q0:std_logic;
begin
process(clk)
begin
if clk'event and clk='1'
then
if i='0' then q0<='0';
n<=0;
elsif n<=9 and i='1' then --計(jì)數(shù)滿60分后報(bào)警輸出,重新計(jì)數(shù)
q0<=not q0;
n<=n+1;
else q0<='0';
end if;
end if;
end process;
q<=q0;
end ar;
生成的電路元件圖如圖8所示
圖8
(4)元件例化元件例化是用含有完整程序結(jié)構(gòu)的VHDL表述來構(gòu)成自頂而下層次化設(shè)計(jì)的一種重要手段。將已經(jīng)設(shè)計(jì)完成的底層文件調(diào)用構(gòu)建成一個(gè)完整的電路文件。將要引用的文件放入例化文件目錄下。
library ieee;
use ieee.std_logic_1164.all;
entity mb_top is
port (
stop,start,clk:in std_logic;
a,b,c,d,e,f,g,speaker:out std_logic;
sel:out std_logic_vector(3 downto 0);
vga:out std_logic_vector(3 downto 0));--選擇電路上的數(shù)碼管
end mb_top;
architecture a of mb_top is
component div --分頻器
port(clr,clk: in std_logic;
q: buffer std_logic);
end component;
component count10 --10進(jìn)制計(jì)數(shù)器
port(
clr,start,clk:in std_logic;
cout:out std_logic;
daout:buffer std_logic_vector(3 downto 0));
end component;
component count6 --6進(jìn)制計(jì)數(shù)器
port(
clr,start,clk:in std_logic;
cout:out std_logic;
daout:buffer std_logic_vector(3 downto 0));
end component;
component seltime --數(shù)據(jù)選擇器
port(
clr,clk:in std_logic;
dain0:in std_logic_vector(3 downto 0);
dain1:in std_logic_vector(3 downto 0);
dain2:in std_logic_vector(3 downto 0);
dain3:in std_logic_vector(3 downto 0);
dain4:in std_logic_vector(3 downto 0);
dain5:in std_logic_vector(3 downto 0);
sel:out std_logic_vector(3 downto 0);
daout:out std_logic_vector(3 downto 0));
end component;
component deled
port(
num:in std_logic_vector(3 downto 0);
led:out std_logic_vector(6 downto 0));
end component;
component alarm --報(bào)警電路
port(
clk,i,clr:in std_logic;
q:out std_logic);
end component;
signal div_q,b_cout,s_cout,m_cout,sm_cout,f_cout,sf_cout:std_logic;
signal b_daout,s_daout,m_daout,sm_daout,f_daout,sf_daout,seltime_daout:std_logic_vector(3 downto 0);
signal ledout:std_logic_vector(6 downto 0);
begin
vga<="1011"; --寫入vga調(diào)用電路板上的數(shù)碼管
a<=ledout(0);b<=ledout(1);c<=ledout(2);d<=ledout(3);
e<=ledout(4);f<=ledout(5);g<=ledout(6);
u1:div port map(stop,clk,div_q); --元件位置
u2:count10 port map(stop,start,div_q,b_cout,b_daout);
u3:count10 port map(stop,start,b_cout,s_cout,s_daout);
u4:count10 port map(stop,start,s_cout,m_cout,m_daout);
u5:count6 port map(stop,start,m_cout,sm_cout,sm_daout);
u6:count10 port map(stop,start,sm_cout,f_cout,f_daout);
u7:count6 port map(stop,start,f_cout,sf_cout,sf_daout);
u8:seltime port map(stop,div_q,b_daout,s_daout,m_daout,sm_daout,f_daout,sf_daout,sel,seltime_daout);
u9:deled port map(seltime_daout,ledout);
u10:alarm port map(div_q,sf_cout,speaker);
end a;
七、波形仿真
八、設(shè)備驗(yàn)證(1)引腳分配圖9引腳分配圖
(2)程序下載圖10下載圖
(3)設(shè)備驗(yàn)證圖11 實(shí)驗(yàn)結(jié)果圖
九、設(shè)計(jì)心得及體會(huì)通過此次課程設(shè)計(jì),讓我對(duì)EDA這門技術(shù)有了更深的體會(huì),并更好的學(xué)會(huì)了使用QuartusⅡ軟件進(jìn)行硬件設(shè)計(jì)。
在編寫程序的過程中,遇到了很多問題,使我發(fā)現(xiàn)自己以前學(xué)習(xí)上存在的不足。通過與同學(xué)探討和請(qǐng)教老師,終于把問題都解決了,并加深了對(duì)數(shù)字時(shí)鐘原理和設(shè)計(jì)思路的了解。同時(shí)我也掌握了做課程設(shè)計(jì)的一般流程,為以后的電子設(shè)計(jì)這塊積累了一定的經(jīng)驗(yàn),為以后從事相關(guān)工作有一些幫助。最終解決了問題,攥寫成報(bào)告。
通過對(duì)設(shè)計(jì)對(duì)實(shí)現(xiàn)和對(duì)報(bào)告對(duì)撰寫,深深體會(huì)到了VHDL語言和EDA技術(shù)的一些技巧和設(shè)計(jì)思想,在完成設(shè)計(jì)的過程中,應(yīng)該具有很清晰地思路,才可以使電路更完美和簡(jiǎn)便,要敢想敢做但是不應(yīng)該有投機(jī)取巧的心理。在完成每一步的時(shí)候都有意想不到的收獲也有可能導(dǎo)致錯(cuò)誤,所以在設(shè)計(jì)對(duì)過程中要集中精神。在寫報(bào)告的過程中,更加凸顯了細(xì)心二字。不可自認(rèn)為完美,必須按照格式要求來撰寫自己的報(bào)告,所以必須做到足夠的精確。
利用EDA工具,電子設(shè)計(jì)師可以從概念、算法、協(xié)議等開始設(shè)計(jì)電子系統(tǒng),大量工作可以通過計(jì)算機(jī)完成,并可以將電子產(chǎn)品從電路設(shè)計(jì)、性能分析到設(shè)計(jì)版圖的整個(gè)過程的計(jì)算機(jī)上自動(dòng)處理完成。在進(jìn)行設(shè)計(jì)時(shí)并不束縛設(shè)計(jì)者的想象力,這使得自學(xué)、擴(kuò)展也可以很容易實(shí)現(xiàn)。在設(shè)計(jì)中充分的認(rèn)識(shí)到EDA課程對(duì)硬件設(shè)計(jì)的重要性,若把本門課程學(xué)好、學(xué)精,對(duì)硬件設(shè)計(jì)將有很大對(duì)幫助。以后若有機(jī)會(huì)我將會(huì)利用更多時(shí)間來學(xué)習(xí)EDA技術(shù)、更加深入的學(xué)習(xí)EDA技術(shù)。EDA技術(shù)以其獨(dú)有的優(yōu)點(diǎn)和應(yīng)用范圍有著非常好的發(fā)展前景,是近幾年電子工業(yè)的發(fā)展趨向,中國的EDA行業(yè)發(fā)展十分迅速,有著很大的潛力。所以我們學(xué)好這門課程是十分必要的,我們不應(yīng)該僅僅拘泥于一門課程的學(xué)習(xí),要結(jié)合各學(xué)科的連接點(diǎn),把我們的知識(shí)串聯(lián)起來。為我們的未來做好知識(shí)儲(chǔ)備。
以上就我關(guān)于這次課程設(shè)計(jì)的想法,在以后,我會(huì)用更多的時(shí)間去了解EDA。并且提高自己的知識(shí)水平。
以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便大家保存):
秒表實(shí)驗(yàn)報(bào)告.docx
(1.94 MB, 下載次數(shù): 28)
2019-1-8 16:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: weib 時(shí)間: 2019-1-10 02:18
本實(shí)驗(yàn)報(bào)告應(yīng)用為EL-socp3000電路板
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |