标题: VHDL 8位数码管扫描显示电路(原创) [打印本页] 作者: zgq800712 时间: 2008-12-1 15:47 标题: VHDL 8位数码管扫描显示电路(原创) module _7segscan(clk,dataA,dataB,dataC,dataD,segd,sel); - q- |: Q; E$ p# |% Z- \/ E! Hinput [7:0]dataA; 4 J" c% t+ r9 l! dinput [7:0]dataB;+ @) F5 v) v7 n4 k8 |
input [7:0]dataC;4 s! g9 _6 P$ }: y. [) s
input [7:0]dataD;' g8 z4 K( e' g& D4 y" U; x- x
input clk; % I0 R4 n8 o' j( T% T8 _0 houtput [7:0]segd;5 P; P% I! u4 _% M0 F% S
output [3:0]sel;1 d( A* `9 p! _2 E8 C+ x) X; W
reg [7:0]segd;. X3 W0 I3 ]6 g: b8 k6 L$ \
reg [3:0]sel; # h$ M- M! r5 E( wreg [1:0]i;/ m, ^9 w3 F+ i7 H' j
[email=always@(posedge]always@(posedge[/email] clk)! l' o- x" g9 g, v) M' x
begin: y$ ?# j9 g: u3 o
i<=i+1; 9 C8 k, b l+ |. `. ocase(i) ( b; [, k& p$ r& _0 G$ f3 U' s 0:begin segd=dataA;sel=8;end1 l* ^ s/ g$ M) R. k
1:begin segd=dataB;sel=4;end 4 n# E" @2 C1 ]2 b8 ^9 H$ `) ?7 t 2:begin segd=dataC;sel=2;end0 J. m) U1 |$ Y4 q$ o Q9 `, e
3:begin segd=dataD;sel=1;end 9 _/ E; ?) z, }' ^5 ~ default:begin segd=8'bx;sel=0;end O4 S3 C2 F% z* K( h% J8 fendcase! c8 Z% ]$ ^3 N" }& w1 s
end 5 H, q9 c( H* {( L0 cendmodule . b2 ~. F6 ^$ o& ~ - U) O, B; j) a1 D" I/ z* o 2 G9 I% D# h7 z$ F( U6 r " e6 D* _0 [' }: D2 R这个是Verilog 的,VHDL的没有;;; 7 P9 l/ M/ e7 M; n2 l8 q7 q4 k M刚学VHDL,很多概念;分析方法多不知道;8 n" V& Y; z& y
有时候把问题想的很复杂,让自己陷入困境;更难写了 % ~) u+ c; g7 v* \VHDL的8位数码管扫描显示电路 有头绪了,但还是写不出来;没有输入端口直接显示会了; 3 K8 a3 E' {, g1 W7 M但是有输入。老是把它想成锁存,每位多要带锁存器硬件电路; , i$ q/ n# U( a! ~3 m' h 写软件的时候老是想着硬件电路,怎么样也想不出办法 $ s. ?; ]' ~' G% \ - P# i; M( g! t3 I! X. q0 z : N# R7 g# c2 f$ D# g% u0 ?" F' e# i2 M7 @ h5 D' h
今天早上在写。。。 ) v4 J( I. f$ F/ g, \ R/ m$ j4 G2 b1 b
) I. W" \' B' z6 b i& i" T/ x1 g zyunfei 威望 +10 谢谢版主 ,不过上面的不是原创内容;今天下午用VHDL写了个8位数码管扫描电路;编译通过了。不过有不少waring; & T& L$ M6 S! p5 v4 o! I+ A D' x: d" G: `+ F% x0 r
一个人孤军作战一个字 累!!!更更何况我是新手;新手也寂寞啊 ! ]+ w$ w1 y* f2 `" TWarning: Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family3 j4 @- |. E( U2 S9 i+ d# S
" q" t- w% g" C5 P3 J' ~8 O8 A; S- DWarning: Found pins functioning as undefined clocks and/or memory enables Info: Assuming node "CLK" is an undefined clock 1 @$ a1 E1 }- ^3 |+ L " p7 F E. e! o R) H9 x; s6 i不去掉仿真设置下的的CHECK OUTPUTS仿真的时候会出现如下错误:请高手指点一二:+ ^% h* z8 Y( j! n, F Error: Simulation results from F:/VHDL/LED_SCAN/db/LED_SCAN.sim.cvwf (0 ps to 1.0 us) do not match expected results from vector source file F:/VHDL/LED_SCAN/LED_SCAN.vwf0 T& o. t+ v2 d! o6 V
! A6 k! k- Z6 e* O) }( y
4 ]$ U$ e7 N# f) }/ K由于不会做仿真最后没有仿真,序列信号多不会赋值,晕死了; 大家会就教教我把!!! & u ?; S [$ J" q# G* N7 D+ h( h7 F: [1 ^( L- H0 Y- l8 L
数码管是共阴的,位码大家自己看下是不是对应起来了!! + T/ W- c0 B, H( W E此程序不带译码功能,直通输出;5 D6 u7 n! d9 ~' x, {) y
$ {# m) @' V0 {0 _8 j* V( P如果你使用的是7064(64个宏),那 Error: Can't fit 67 registers in device ;哈哈,资源不够 0 a* p6 M, ] I4 U- b8 n' p* y % I5 O- o I, e3 B4 u 9 K# I. D& ~1 d下面是完全自己写的源码,没有在目标板上试验过。 复制代码的朋友要注意了!!! * g. [" t* k' z! h- s9 p/ R: t2 T6 `7 E5 {
LIBRARY IEEE;$ R4 _- s! h2 k
USE IEEE.STD_LOGIC_1164.ALL;, F" A9 j( Q. q7 B
USE IEEE.STD_LOGIC_UNSIGNED.ALL;0 M7 c% m( \- R7 B( T1 w
USE IEEE.STD_LOGIC_ARITH.ALL; ( w9 J+ _- x+ N9 ` 9 S' ?% K4 k9 p9 f/ UENTITY LED_SCAN IS ' m; L& P9 B: K1 w; @ XPORT( B3 ^1 D5 L/ T, L! Y) X) L# |/ \+ x; ]! A SEG7IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); ! U2 H9 y3 W% h9 b
SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);) T. z3 a" F& V# }( _1 ~0 m- n
CLK:IN STD_LOGIC; 6 l" Y5 I4 @: E6 X3 B4 f4 Z" j" x4 {
SEG7OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); # `4 G, O$ U B* l SCAN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) & _ |- a! i# O( Y- p );8 Q# ~, m5 E( i
END LED_SCAN;: w; w4 q) h! K" z
ARCHITECTURE BEHAV OF LED_SCAN IS + [6 e2 N2 F3 }$ `4 |+ X2 J2 YSIGNAL cnt8:INTEGER RANGE 0 TO 7; + U+ M* x( a9 E$ L2 F pSIGNAL TEMP0,TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000000"; . Y- P$ k& _0 ?5 \BEGIN' G* s. @" D, w$ o# n! w' I f( s
PROCESS(CLK) 4 `7 K% u* c8 y+ K( R: TBEGIN8 q) y/ p3 P& _2 v0 d
IF (CLK'EVENT AND CLK='1') THEN2 G- }. i9 I1 C1 @4 c
cnt8<=cnt8+1;6 v/ n2 r; |* `% Z; Z& k
END IF;+ c6 z; x2 t& w5 e
END PROCESS;1 t7 a( h0 d8 p# t6 a+ s
3 b) Y% h( L. |PROCESS(CLK)/ ~7 Y4 o3 z5 `0 n& ~" n I4 C% j& p" _" K
BEGIN& M) a# h7 b+ O0 c' U
IF (CLK'EVENT AND CLK='1') THEN , x, e' d& }' m4 z( T' F6 K- kCASE SEL IS/ m0 C, z+ {# t' e% d
WHEN "000"=>TEMP0<=SEG7IN; + \1 `2 V9 ]$ G: e' ?3 D% E- V) o7 L3 nWHEN "001"=>TEMP1<=SEG7IN; 7 ?) p" ?1 p4 \9 W' }8 d' TWHEN "010"=>TEMP2<=SEG7IN;: S8 ~! ?- V, p0 d& p1 ?1 V
WHEN "011"=>TEMP3<=SEG7IN; : ?% d8 Y6 y5 P( DWHEN "100"=>TEMP4<=SEG7IN;& j, ~7 C" F0 @/ O" ~/ i
WHEN "101"=>TEMP5<=SEG7IN; & a4 H, o1 W. R( t7 b+ cWHEN "110"=>TEMP6<=SEG7IN; % Z0 y4 I: \0 |WHEN "111"=>TEMP7<=SEG7IN; # [$ Y9 Q- O6 |. j, t. |4 mWHEN OTHERS=>NULL; 1 T% X* _ N! f* c+ HEND CASE;1 M8 K2 S8 t" Z
END IF; ) o' L C/ H/ y" V0 N" IEND PROCESS; " Z) x5 H( }7 } E7 y4 o! |; mprocess(cnt8,TEMP0,TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7) ) s: \1 C2 c; B1 KBEGIN & W u8 M4 b( y1 F7 S2 G CASE cnt8 IS5 L/ g8 `! |& F, \
WHEN 0=>SCAN<="01111111";SEG7OUT<=TEMP0; ( J# X: r7 B2 E WHEN 1=>SCAN<="10111111";SEG7OUT<=TEMP1; # M1 ? {8 a! d* t# E' h! M ?, ` WHEN 2=>SCAN<="11011111";SEG7OUT<=TEMP2;/ v- y) N% I8 G9 S9 u) y* a% Q( d, Q" Q
WHEN 3=>SCAN<="11101111";SEG7OUT<=TEMP3; # F1 o. r# A# P; ~ WHEN 4=>SCAN<="11110111";SEG7OUT<=TEMP4;! J9 Q9 j, \3 ]3 L6 l' D% `
WHEN 5=>SCAN<="11111011";SEG7OUT<=TEMP5; ) q) F- @& R! \# o WHEN 6=>SCAN<="11111101";SEG7OUT<=TEMP6;: c4 m0 B0 h+ q* T% B! Z' u' K3 t- E+ V }
WHEN 7=>SCAN<="11111110";SEG7OUT<=TEMP7; 4 [6 x+ u/ x) E5 \; U$ X8 u! s) { WHEN OTHERS=>NULL;+ U6 o* B8 o3 {5 u6 g6 P! K1 W6 T* z
END CASE; 8 V! ~0 {; K0 O+ X% X' O3 oend process; 6 T9 M) s& h8 G0 XEND;( p% N! Z5 r# n9 o% |! D. ~
1 B+ j8 A3 s( y* q* Y3 E. l, @
5 T$ H+ O+ {* z. |, |/ \9 I. V- t# `) B# @7 e4 a, i
9 x1 T0 N" g% R) n4 z/ N; b+ E6 O
+ u- s2 _0 i5 f/ A& T7 o现在又发现没有带一个写入使能;所以就加WR信号,当WR为1的时候允许写入,当7位写完后置0,此后不管 SEG7IN ,SEL 为什么多不会进行写入;& J2 x$ ]( [* \ H1 c$ ?0 d
这个东西断断续续 搞了我一下午, 哎,,很久没有这么投入了的做一件事情了!!! $ S# V9 C+ _6 s/ n0 K现附上源代码:; a7 l$ s1 x) }) ?8 J$ j
LIBRARY IEEE;- F# ]0 y+ j5 H
USE IEEE.STD_LOGIC_1164.ALL;- n; u' f0 Z/ ~* Y. O S
USE IEEE.STD_LOGIC_UNSIGNED.ALL; % l5 G% q1 D4 p9 D" r/ wUSE IEEE.STD_LOGIC_ARITH.ALL; ! B! |$ j# \2 T# X. x3 L4 h& M% @1 S
ENTITY LED_SCAN IS& x' q) b1 p6 n
PORT( % E+ g9 R: S/ @
SEG7IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); : _8 b0 X7 C1 i6 L% A% c# W SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0); . P7 t3 a# L U& d CLK,WR:IN STD_LOGIC; 5 i# {5 z/ j& i# I/ S
SEG7OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ' y; F8 D9 m5 a$ D SCAN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)" C# C. u2 X, `! V4 w3 w0 f0 j
);, _, W" p7 \- `: K( D* P% H: ~
END LED_SCAN;9 F9 q8 j1 F; L9 ^ `
ARCHITECTURE BEHAV OF LED_SCAN IS 4 [$ [& q- r9 z! n* U! W w1 BSIGNAL cnt8:INTEGER RANGE 0 TO 7:=0;5 I# ]3 [* {* Z" ^, s- s
SIGNAL TEMP0,TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7:STD_LOGIC_VECTOR(7 DOWNTO 0); $ T; \9 M6 l1 Y a% d1 U2 ABEGIN & {! U2 ^6 B. Y% S6 KPROCESS(CLK) " O3 J% |3 k7 M# v* rBEGIN5 [* r# I3 G2 d4 i" F6 G6 E9 N
IF (CLK'EVENT AND CLK='1') THEN 4 p* k& c3 B% f/ f. tIF WR='1' THEN ' N) Y( D2 P) I+ {0 @CASE SEL IS " u7 @7 U" ^4 J% g3 F9 SWHEN "000"=>TEMP0<=SEG7IN;: h4 ]. l e8 t* ^: I
WHEN "001"=>TEMP1<=SEG7IN;- H' Y0 v* I. j0 J
WHEN "010"=>TEMP2<=SEG7IN; & P& F( L) s, }. |8 Y, wWHEN "011"=>TEMP3<=SEG7IN; ; b- h+ ^) v- N: @) h; DWHEN "100"=>TEMP4<=SEG7IN; 7 q- ^8 J4 {% r- E U }6 QWHEN "101"=>TEMP5<=SEG7IN;$ W1 r3 ?# g7 l g. I9 w I# E
WHEN "110"=>TEMP6<=SEG7IN;* N' O- V7 n. v* F/ e a* B
WHEN "111"=>TEMP7<=SEG7IN; + p1 w: f+ B" G0 z' zWHEN OTHERS=>NULL; ( F6 b# e9 S- }8 o6 i* ]: ~# v0 yEND CASE;( m+ K6 F4 C* H: L$ P
END IF; 2 o' J6 `! _7 }% N' J$ n+ j* aEND IF; " H, U+ E; Z5 `& C# X3 H d/ M3 sEND PROCESS; ) h8 M7 R0 a1 cPROCESS(CLK)% q$ X4 H# N" T( T* p' |
BEGIN % G4 O3 [3 Z! N* O* M5 M, b' MIF (CLK'EVENT AND CLK='1') THEN : R W9 V# C( l" L. K( L8 D3 K7 J cnt8<=cnt8+1; $ t% c. j" o4 o" C WEND IF;" ^$ [; m) @6 `
END PROCESS; 3 \; u* f$ W$ P. t, l2 Tprocess(cnt8) ! a7 V9 o7 k9 Q7 sBEGIN$ @0 V2 k9 G, @) [
CASE cnt8 IS' A5 T' i, q# T' t7 b2 |
WHEN 0=>SCAN<="01111111";SEG7OUT<=TEMP0;/ M; v d9 f- \# q5 {7 |! h0 w6 S$ m
WHEN 1=>SCAN<="10111111";SEG7OUT<=TEMP1;1 R+ E1 @8 P: W# } J
WHEN 2=>SCAN<="11011111";SEG7OUT<=TEMP2; a& R2 I) @: v+ S: @; t$ O) e WHEN 3=>SCAN<="11101111";SEG7OUT<=TEMP3;, ~. \( g. [. \7 Q4 V
WHEN 4=>SCAN<="11110111";SEG7OUT<=TEMP4; , f& ^4 n' m4 D# k& f WHEN 5=>SCAN<="11111011";SEG7OUT<=TEMP5;" R7 Z, x0 Z7 S$ m8 c2 ?# s
WHEN 6=>SCAN<="11111101";SEG7OUT<=TEMP6; & J- I$ ?" K7 [8 N WHEN 7=>SCAN<="11111110";SEG7OUT<=TEMP7; ! {' k$ d I. t( T9 @9 ^" @ WHEN OTHERS=>NULL;% L4 A% K$ L8 U
END CASE; : m, P X. }9 g Z0 I6 |end process;, ?. _5 Q+ y( @
END;3 \' b1 D4 J& m0 T# ^