电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1840|回复: 0
收起左侧

这段VHDL代码该怎么改?(小白一枚)

[复制链接]

604

主题

970

帖子

5115

积分

四级会员

Rank: 4

积分
5115
发表于 2022-7-15 20:40:52 | 显示全部楼层 |阅读模式
library IEEE;
6 E! A4 A  X4 w; r- p9 Kuse IEEE.std_logic_1164.all;
; f* C9 F2 b$ euse IEEE.std_logic_unsigned.all;
# f  v) C* Q; u8 {1 f& p6 f, cuse IEEE.std_logic_arith.all;
4 |$ C, {5 H& Uentity control is0 u, I2 s  ?+ p) W. U2 N, U
port(Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19:in std_logic;  
0 {  Z7 l; j4 L/ ]  N% f1 S     A1,A2,A3,B1,B2,B3,C1,C2,C3,D1,D2,D3 :out std_logic);
. W: l. U( q% y  u4 Mend control;) `4 P1 X1 w- ~& ?
architecture turn of control is( C! {& [6 D/ X7 l3 r& u
signal ai,bi,ci,ei,fi,gi,hi:integer range 0 to 9;
4 [2 r  P% q4 _" {3 y8 Vsignal di:integer range 0 to 10000000; + {4 e# ?+ Q/ K+ W8 O$ y
signal temp_out1  : std_logic_vector(3 downto 0);" R3 Q  L  z0 D4 d) M! K
signal temp_out2  : std_logic_vector(3 downto 0);
! G+ _4 S9 l3 r4 y" Z5 v: Xsignal temp_out3  : std_logic_vector(3 downto 0);
& x8 p& _- H# v0 ?: qbegin
1 p+ a) o, U7 N' M. y! ]6 o; s% _di<=Q0+Q1*2+Q2*4+Q3*8+Q4*16+Q5*32+Q6*64+Q7*128+Q8*256+Q9*512+Q10*1024+Q11*2048+Q12*4096+Q13*8192+Q14*216384+Q15*32768+Q16*65536+Q17*131072+Q18*262144+Q19*524288;
4 ?9 q+ Z/ ^' W7 ]--把Q0~Q19对应的二进制数转成十进制数,并赋给di
0 X) d4 e7 D7 q/ x  Gprocess(di)
% T( ]& q) a: r. s' R& h3 R  hvariable a,b,c,e,f,g,h:integer range 0 to 9;
, h# O  u3 a6 L0 Sbegin/ z% Z. k; c/ u+ I4 L/ I7 [
a:=di rem 10;* n& p2 Z' K; p' v3 R
b:=(di-a)/10 rem 10;1 k. c$ q: y4 {
c:=(di-a-b*10)/100 rem 10;5 s* s6 L5 E9 @$ _% |
e:=(di-a-b*10-c*100)/1000 rem 10;
2 J7 l0 C4 g3 p4 mf:=(di-a-b*10-c*100)/1000 rem 10;
& |9 X! U5 ~# W7 }/ Vg:=(di-a-b*10-c*100-e*1000)/10000 rem 10;
0 e2 p" C& f" N; ^3 Z) k0 q. f+ j5 Fh:=(di-a-b*10-c*100-e*1000-f*10000)/100000 rem 10;
+ k4 ]& L# s6 e- V$ sai<=a;
3 ~. t7 ^6 l+ S# n& Z( |bi<=b;! z. l4 e# }  R7 a
ci<=c;
& s( r8 V* S6 D( |2 t- {3 Xei<=e;1 b. Q2 k4 H  L( `
fi<=f;, N  t+ a: m9 [
gi<=g;+ l& I6 Y# `7 c0 n/ V8 A: o
hi<=h;9 ^- _2 p2 D! Q4 _3 H2 i
end process;--把di各数位的数字分别赋给ai~hi(个位~百万位)3 ]6 i( P# P' d* k, s/ g
process(ai,bi,ci,ei,fi,gi,hi)
& o* W  S& L# pvariable a1,a2,a3,b1,b2,b3,c1,c2,c3,d1,d2,d3:integer range 0 to 1;& Q7 E; x: s" _: |
Begin
+ t7 [& c( a7 _* I: P. qIf (di>990000) then- y; R0 Z: V+ z& p  F' ^
  temp_out1 <="0000"; 5 z9 ^5 n% a+ ?
  temp_out2 <="0000";
$ D$ s0 ^. m' X. a/ z  temp_out3 <="0000"; $ Y5 r/ V+ R, |  T! j7 R( O
elsif (hi>0) then
2 k9 n3 C: ]. `6 R2 r% Y5 s temp_out1 <=CONV_STD_LOGIC_VECTOR(hi,4) ; --把hi转成二进制,并赋给temp_out16 z8 e* G2 y: I) C
temp_out2 <=CONV_STD_LOGIC_VECTOR(gi,4); --把gi转成二进制,并赋给temp_out1
( G& A+ w; y( A' U% E. y temp_out3 <="0101";
/ Y5 X' m0 j' b& M- ]elsif (gi>0) then
" D! B# |' U: h" f0 Z   temp_out1 <=CONV_STD_LOGIC_VECTOR(gi,4); 3 t1 G% ^0 f+ t) J9 o; Q- u  j  Y
temp_out2 <=CONV_STD_LOGIC_VECTOR(fi,4);
# H& C& S( p: k. R temp_out3 <="0100"; 9 q- ]$ s4 x2 P2 g# ~
elsif (fi>0) then
8 w" C% e$ Q, f  s     temp_out1 <=CONV_STD_LOGIC_VECTOR(fi,4); $ c+ z3 L8 R( o; a/ u" U$ z2 w2 M% U: D
temp_out2 <=CONV_STD_LOGIC_VECTOR(ei,4); : p; n1 {9 V% u+ f( [% ?' M; ^
temp_out3 <="0011"; ' n; W$ c" J  M/ H
elsif (ei>0) then
2 a$ n, x/ x+ s! s: y      temp_out1 <=CONV_STD_LOGIC_VECTOR(ei,4); + L2 S( g+ _% B# S
    temp_out2 <=CONV_STD_LOGIC_VECTOR(ci,4); ) a5 s) j8 `3 D/ S
    temp_out3 <="0010"; ( K. ^- |' L: T" c) O
   elsif (ci>0) then1 D2 i& H* z1 E2 f- G! _" H
       temp_out1 <=CONV_STD_LOGIC_VECTOR(ci,4); 9 p) |# B: W, R; v
     temp_out2 <=CONV_STD_LOGIC_VECTOR(bi,4); ; m  y/ @. t5 j
     temp_out3 <="0001";
+ N4 v  u# o, T; E. Y, Y* h    else3 B$ L1 f4 k2 G; a: r
     temp_out1 <="0000"; ( R4 Q7 s, Q* ^! o- h  I8 `1 S  M
     temp_out2 <="0000";
  J6 {+ ?$ @, h4 I5 Y" d: G6 X     temp_out3 <="0000"; % B) X6 X5 ~, m% Y, P1 J3 o# F
end if ;9 Q- X6 T& V9 ]' j; w9 G& C
  A1 <=temp_out1(0);! s( k6 W: d: }. l) _8 ^) {5 ~
  B1 <=temp_out1(1);: U4 T4 q( \- c$ D9 |( O) T, P
  C1 <=temp_out1(2);; y- A1 B  r. _1 U  x) m
  D1 <=temp_out1(3);                 --第一片数码管的控制端CD4511的输入+ u$ c) c/ s7 P, j% v
  A2 <=temp_out2(0);7 J6 ?; l, ]: \. ~- t
  B2 <=temp_out2(1);# O6 [9 j7 C8 d: r5 q
  C2 <=temp_out2(2);
+ m8 ~( O; f( \5 `  D2 <=temp_out2(3);                  --第二片数码管的控制端CD4511的输入% V- C: \+ L' R# ~
  A3 <=temp_out3(0);
4 f* ?  ~+ z: B$ E7 T. s, R  B3 <=temp_out3(1);4 W9 D6 g) H  ^) J0 L
  C3 <=temp_out3(2);
8 I- }4 E  ?/ i; H, W$ z  D3 <=temp_out3(3);       --第三片数码管的控制端CD4511的输入
) |3 y8 s; c! w( o7 P8 s  end process;3 b0 J, u3 W$ I- z
  end turn;' j/ g, P& h* F0 Z0 Q
#VHDL##FPGA#
! `5 ^, r7 ^: q, C! A. B9 q/ v! F# |

1 {& |  {2 {* y
" y" D& I* I/ @1 q! A. Y* z; }, G* @4 V
8 M, ~) p/ x  }" c0 a( o

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表回复

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

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表