我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 920|回复: 0

VHDL 8位数码管扫描显示电路(原创)

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-29 19:24:16 | 显示全部楼层 |阅读模式
module _7segscan(clk,dataA,dataB,dataC,dataD,segd,sel);
input [7:0]dataA;
input [7:0]dataB;% A# C) I0 e$ D& t8 u
input [7:0]dataC;
input [7:0]dataD;5 X4 P7 S- p- G}2 R/ b" y
input clk;
output [7:0]segd;
output [3:0]sel;" n7 l( v. P* D- W+ _( ]7 W
reg [7:0]segd;
reg [3:0]sel;5 m! O* O8 v; ~; \$ k" Y
reg [1:0]i;* z& i+ u) S, n! u; Y, i
[email=always@(posedge]always@(posedge[/email] clk)* P" f) Y. ?- n! |- W
begin1 P8 z+ q8 C, {$ ~: F3 h' d4 Z( l
i<=i+1;% c# M3 M* c" n" m. O
case(i)& `8 C$ N; r1 |: T
0:begin segd=dataA;sel=8;end4 K; r# C" W7 y+ D
1:begin segd=dataB;sel=4;end
2:begin segd=dataC;sel=2;end
3:begin segd=dataD;sel=1;end
default:begin segd=8'bx;sel=0;end0 t1 ^+ q' S?
endcase
end
endmodule

' C% P+ m8 ]/ E* @9 U: ^# k
, j, ^* N: o5 i: Q4 V% H1 q
这个是Verilog 的,VHDL的没有;;;5 ^1 {1 AC3 v
刚学VHDL,很多概念;分析方法多不知道;
有时候把问题想的很复杂,让自己陷入困境;更难写了
VHDL的8位数码管扫描显示电路 有头绪了,但还是写不出来;没有输入端口直接显示会了;3 Q: u( v8 m$ t# O6 @' A( C
但是有输入。老是把它想成锁存,每位多要带锁存器硬件电路;
   写软件的时候老是想着硬件电路,怎么样也想不出办法: P- x- B* w9 @- H# g

- h5 K0 g; E; B
# Y( S6 @1 m# x3 Q! C$ z/ h
今天早上在写。。。* a5 x8 M, B" w: V& u* j& w* g, i
/ y7 e1 M, y" W8 s8 p
2 w1 L) h5 w~$ U/ }! D2 J
zyunfei 威望 +10 谢谢版主 ,不过上面的不是原创内容;今天下午用VHDL写了个8位数码管扫描电路;编译通过了。不过有不少waring;0 o/ `9 B7 U) \$ Q" v2 f
% j) ?5 g, c- a* ^M4 j6 i
一个人孤军作战一个字 累!!!更更何况我是新手;新手也寂寞啊( ~, U( s! B" f, n; g
Warning: Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family; Y% Y/ q# g* l6 r4 m0 V" ^
# A1 ]0 P% d" {; N4 P
Warning: Found pins functioning as undefined clocks and/or memory enables Info: Assuming node "CLK" is an undefined clock

不去掉仿真设置下的的CHECK OUTPUTS仿真的时候会出现如下错误:请高手指点一二:3 I2 k/ d3 v. H9 [4 t* n) r) _1 {
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.vwf2 R6 h& ]0 K4 N/ e

# B3 k, Q2 d2 f) E. p2 O7 M
由于不会做仿真最后没有仿真,序列信号多不会赋值,晕死了; 大家会就教教我把!!!
1 m5 |3 H) D% r6 F2 v
数码管是共阴的,位码大家自己看下是不是对应起来了!!9 O6 `6 W8 x+ \; o* m) j' ?
此程序不带译码功能,直通输出;

如果你使用的是7064(64个宏),那 Error: Can't fit 67 registers in device ;哈哈,资源不够

Q9 Q. @% g. O) M% v: v* x/ ~! F: v6 a
下面是完全自己写的源码,没有在目标板上试验过。 复制代码的朋友要注意了!!!( Z0 y- P3 I' @- U. o8 n3 V' U

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;( F) m% `+ x6 L( S% O
USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY LED_SCAN IS
PORT(( g" K# i% {0 [9 z
SEG7IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);      
SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
CLK:IN STD_LOGIC; ! b. q3 \, W_6 j& i
SEG7OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);; q: Y7 r3 H6 w- {2 B# K5 T
  SCAN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)) o% B0 ^8 H# c2 K$ E1 i
);. C4 v, o+ Z& b0 v* k2 {) B, Z; c& F
END LED_SCAN;
ARCHITECTURE BEHAV OF LED_SCAN IS
SIGNAL cnt8:INTEGER RANGE 0 TO 7;
SIGNAL TEMP0,TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000000";
BEGIN
PROCESS(CLK)5 B: n5 K1 Y* I2 d8 ]; v3 [
BEGIN
IF (CLK'EVENT AND CLK='1') THEN% f* Z. Y9 E$ S, `8 ~5 u. ]) f: z6 j
cnt8<=cnt8+1;
END IF;
END PROCESS;0 F/ R9 p1 A6 }9 H2 n, A- F
* p' T1 U' N; ]& r
PROCESS(CLK)3 G( I' O! X- n$ p# Z; V
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
CASE SEL IS% x3 X; y7 w" n5 m7 f
WHEN "000"=>TEMP0<=SEG7IN;' T/ d- N0 N5 d! K
WHEN "001"=>TEMP1<=SEG7IN;6 u8 p6 x1 H" E" `: j
WHEN "010"=>TEMP2<=SEG7IN;$ @9 B/ b" @, W7 B3 j6 X* s. r. m
WHEN "011"=>TEMP3<=SEG7IN;
WHEN "100"=>TEMP4<=SEG7IN;: O, m. D" _- ~; M4 C
WHEN "101"=>TEMP5<=SEG7IN;- dT" d" o" h8 l7 g/ D% f
WHEN "110"=>TEMP6<=SEG7IN;
WHEN "111"=>TEMP7<=SEG7IN;
WHEN OTHERS=>NULL;1 n* @$ L" O9 i/ d( o5 X- s; t9 f
END CASE;
END IF;3 V6 o9 H0 s. ]6 o! J
END PROCESS;
process(cnt8,TEMP0,TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7)
BEGIN6 L5 Y5 O2 r6 W9 O( r/ K6 Z$ m. ?
  CASE cnt8 IS
WHEN 0=>SCAN<="01111111";SEG7OUT<=TEMP0;
WHEN 1=>SCAN<="10111111";SEG7OUT<=TEMP1;
WHEN 2=>SCAN<="11011111";SEG7OUT<=TEMP2;s! e( i. @& _4 v$ l2 m
  WHEN 3=>SCAN<="11101111";SEG7OUT<=TEMP3;
  WHEN 4=>SCAN<="11110111";SEG7OUT<=TEMP4;! }7 l* }' Y1 j( R( K
  WHEN 5=>SCAN<="11111011";SEG7OUT<=TEMP5;
  WHEN 6=>SCAN<="11111101";SEG7OUT<=TEMP6;2 R9 E/ J, j' `; r4 x: D( t
  WHEN 7=>SCAN<="11111110";SEG7OUT<=TEMP7;* U2 L# d2 q+ b* @; M
  WHEN OTHERS=>NULL;
END CASE;C: C/ L) J+ K& S+ l
end process;7 b! J' D+ x: f/ z. Z
END;
6 h% A1 w1 F- G4 x$ ]u
; y9 X& M* _! \* T8 u% w
4 ]8 I& O0 c7 {" |# ]9 l* M+ i" ^/ p9 T
0 D* d: w& {$ k5 A8 e

现在又发现没有带一个写入使能;所以就加WR信号,当WR为1的时候允许写入,当7位写完后置0,此后不管 SEG7IN,SEL为什么多不会进行写入;
这个东西断断续续 搞了我一下午,哎,,很久没有这么投入了的做一件事情了!!!! P% B9 A! @2 M8 i4 _
现附上源代码:
LIBRARY IEEE;) E: A0 R4 g. I% f# o9 m8 c
USE IEEE.STD_LOGIC_1164.ALL;5 D: W$ i6 ~+ q" U# ^
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;; \4 Y! T; z; I0 ?) ^: Z
2 Up% Q/ V) O2 @6 E
ENTITY LED_SCAN IS9 }# W% g' P# x1 n$ e
PORT( / m) V* }" A, J: [
SEG7IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);      
SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);" ^/ P3 C7 N# S- R
CLK,WR:IN STD_LOGIC;
SEG7OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
  SCAN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)3 B% h( E' j/ @* A% s
);: w2 a7 D: |: h{
END LED_SCAN;! f+ X7 G" Z: Z7 Y0 ~; N5 t. j
ARCHITECTURE BEHAV OF LED_SCAN IS/ g/ Z8 U7 S1 g1 C) e% W3 h
SIGNAL cnt8:INTEGER RANGE 0 TO 7:=0;
SIGNAL TEMP0,TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6,TEMP7:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLK)/ |( L9 ~G& W
BEGIN, ^; h( y) f$ j/ x' |! R7 x: @4 W
IF (CLK'EVENT AND CLK='1') THEN+ o4 r8 A" \* `4 C
IF WR='1' THEN
CASE SEL IS
WHEN "000"=>TEMP0<=SEG7IN;
WHEN "001"=>TEMP1<=SEG7IN;: ]7 W0 p9 Q0 R% |2 Y7 ?
WHEN "010"=>TEMP2<=SEG7IN;: Pg0 @, [: N4 t& aV
WHEN "011"=>TEMP3<=SEG7IN;
WHEN "100"=>TEMP4<=SEG7IN;
WHEN "101"=>TEMP5<=SEG7IN;
WHEN "110"=>TEMP6<=SEG7IN;
WHEN "111"=>TEMP7<=SEG7IN;/ X% R+ I. L! B$ U
WHEN OTHERS=>NULL;
END CASE;
END IF;7 h' @* [' ?! Z4 g. L
END IF;# x9 g3 m6 f/ g$ J% C, L6 o
END PROCESS;
PROCESS(CLK)
BEGIN+ I6 p2 ?2 A( a9 V
IF (CLK'EVENT AND CLK='1') THEN$ i) P# m0 Q$ ]% r' m3 j8 L
cnt8<=cnt8+1;
END IF;
END PROCESS;# a* B/ E7 ]2 d" w5 _* O
process(cnt8)
BEGIN" W; F7 H) A, B
  CASE cnt8 IS1 b. O7 k3 ]1 a2 I1 P
WHEN 0=>SCAN<="01111111";SEG7OUT<=TEMP0;
WHEN 1=>SCAN<="10111111";SEG7OUT<=TEMP1;
WHEN 2=>SCAN<="11011111";SEG7OUT<=TEMP2;
  WHEN 3=>SCAN<="11101111";SEG7OUT<=TEMP3;+ j% H; O. I( J+ T9 l* L
  WHEN 4=>SCAN<="11110111";SEG7OUT<=TEMP4;
  WHEN 5=>SCAN<="11111011";SEG7OUT<=TEMP5;9 {. F5 ~/ c: p. @5 @7 J' U8 `
  WHEN 6=>SCAN<="11111101";SEG7OUT<=TEMP6;! ]: w4 M! v, a& F$ F$ d5 B
  WHEN 7=>SCAN<="11111110";SEG7OUT<=TEMP7;. i4 ?# A& B& c
  WHEN OTHERS=>NULL;
END CASE;
end process;
END;( _9 y/ w, |3 p. W4 |


下面有仿真图


. B1 o- L' z, M5 m) T4 z. v) E
附上一张RTL , v1 |! q& x( F0 p) b" ~! O
: I4 N* @3 Z% q5 h. A4 o
[ 本帖最后由 zgq800712 于 2008-12-3 20:23 编辑 ]









RTL.GIF
(139.95 KB, 下载次数: 46)




2008-12-3 16:58 上传
点击文件名下载附件
































SIM.GIF
(28.91 KB, 下载次数: 36)




2008-12-3 20:16 上传
点击文件名下载附件










防真图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表