Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3426|回復: 6
打印 上一主題 下一主題

程式邏輯數過大

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-7-30 09:38:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大大好
- P8 i& }& z3 p! k% G6 Z0 M小弟是剛學cpld不久
7 V. R& @' o% _0 F! j/ W最近有在寫一個程式
$ t/ u1 p" x- j- q- l0 K是用4顆按鍵和4顆七段顯示器來做的
# B, w; q" N; x4 Q9 ^, ]% ^4 X功能如下
( L- K5 o2 d: i0 B' O5 F第一顆sw 控制第一顆七段顯示器顯示1~4 切換1~4時,後三顆七段顯示器會顯
4 c- \6 m5 N2 @+ T2 M& \6 }( [               示其位址1 t' y% n- }0 V4 z" _
第二顆sw 是遞增 由後三顆七段顯示器顯示1~512  (進入至設定狀態時才能調)
' i7 s8 f: w! O" D( U第三顆sw 是遞減 由後三顆七段顯示器顯示1~512  (進入至設定狀態時才能調)
, L( L4 I, J! }8 {! o: B第四顆sw 是設定鍵 長按3~5秒後即進入設定狀態,此時第1顆七段顯示器會閃爍即代表進入設9 J4 U1 E/ n- f' s+ i/ n. H
               定狀態,設定完後,再按一下即離開設定狀態,2 [3 c- l, F' C1 u3 i
所使用的IC是MAX II  EPM240( p" b" n$ L# J- I7 f6 R
但是現在只寫出部分功能就已經把邏輯數用爆了
! j6 o& v. b  V: k: r所以要請教各位高手大大們+ W1 C% x, \2 S+ M: R
給小弟指導一下
' I) X, @1 G" ^1 W" `- G謝謝0 a2 q- V0 A6 K% d
( h: C8 R0 O: h
程式是用VHDL寫的 在附件裡

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-8-1 20:09:02 | 只看該作者
看了一下code,發現很難閱讀說,基本建議是不要吝於分行,
  J! S4 R) A; ~/ u4 I0 M你有的把二三個動作寫成一行,除了難讀之外,debug時也不容易查起。
! n6 K3 S2 _! r- ~2 |8 N
* z+ B$ [" {7 R3 a6 s) ~- G. q5 x2 Z+ p而且你是說位址線,但是裡面卻是用時鐘的min 、sec什在命名,) a; Q% |3 l1 r& k
這樣要搞懂你的程式就要花上很多時間,也不容易以你的想法去了解code,
* n) _7 z1 v8 l/ T1 J這部份可能要注意一下。- }( \9 F% V( O

8 `; Q5 I  _, I3 N( n在你想要的功能來看,其實應該很容易寫的,在你的code裡面感覺很明顯你複雜化了,/ x- a, V& M4 q- ^' K) k/ F( l
至於邏輯不夠可以的話換成fpga吧,看了一下他的規格,他閘數好像真的不多。
3#
 樓主| 發表於 2009-8-3 10:38:51 | 只看該作者
謝謝spring69393大大的回覆
5 h# B: r0 H; H* P; Q' o因為小弟是抓別的範例來改的7 x4 c, {2 m" \0 }0 w7 L% R5 b
所以有一些名稱是先照著原本的程式來寫的0 r2 q+ {+ Q. ~; @# d; {/ b/ _
小弟重點想問的是4 f7 g4 S) Z" c& ^0 `( B
因為小弟目前是有四個模式四組運算1 k! i! G) _7 t. N! d) R0 J- n  i
假如我需要存四組的值
1 Z8 d* V2 ?& X運用的運算方法都一樣7 g! C8 n+ }2 K4 S. f
那是需要四組獨立的運算
2 ?7 ]& P% s* ^& o4 a還是有辦法使用同一個運算" ~: h9 H* X5 _2 ~* x
然後讓值能個別存至四個暫存器+ A2 r: F# }- d8 \: V) f  f. L; ^- v
因為我目前的程式是四組獨立的運算
# k* i1 V. h! r( r, c5 W7 a所以會耗去比較多的閘數0 i, p; E; s0 H* l, L
不知是否有方法能讓四個暫存器
* r( F9 d% G3 ^8 j3 ]9 F) H能用同一個運算然後個別存取個別的值1 Q0 b& v& Q& C  `) N) H
希望各位高手大大們6 N! f* }- h/ l/ ?  q6 d3 S
能指點小弟一下* K* s  S+ \! ~. N
謝謝
4#
發表於 2009-8-4 23:27:29 | 只看該作者
reg(CNT) <= 運算式;
4 V1 e+ h& X) A4 D+ Ucnt +1 ;
' p5 G, x/ E6 ]3 z* @# X  Y' a& u! U4 A7 y7 O* Q
大致上用類似這樣的寫法就可以了。初值要宣告就是。

評分

參與人數 1Chipcoin +3 收起 理由
tommywgt + 3 要學得更多你就要問得更多喔!

查看全部評分

5#
 樓主| 發表於 2009-8-11 10:16:48 | 只看該作者

回復 4# 的帖子

感謝spring69393大大的回覆9 f+ k8 Q9 p4 |7 Z
小弟會試試看
6#
發表於 2009-8-13 11:17:04 | 只看該作者
看了你的Code...需要改進的地方很多3 a! H$ c+ |3 E4 I& G5 g
(1)coding style0 q/ O& Z5 N0 U6 p
如其他大大所說...難閱讀8 Y! x1 l$ H* U5 `9 g
另外...那麼多 if-then-else) h/ @8 S7 `1 D
難怪邏輯大
& p0 C3 o& {% w7 }# S, K) y8 Y  }, W+ T, l4 d$ }1 j$ R
(2)問題思考方式% N' e, m# |$ r! F
請試著用硬體思考, u* {/ i( Q% c2 k
請試著把問題切分成數個部份,再思考組合.往往邏輯反而小; D, ]# T( P- M
嘗試把所有問題都畫成一個大FSM,不見的好
7 M( |2 X0 I7 a* ^) y Ex:分成
* _) l* A+ D5 |(A)Switch debounce (不確定你需不需要)
, x4 k4 G5 ^  j1 {) h(B)Switch 轉成內部意義: mode, inc, dec,...
0 {- V2 G7 G/ b; G* Y& z5 a   還要考慮SW4的3~5秒...) @: p! s; I9 P4 O& s
(C)內部counter依照 inc/dece 改變counter 值
  v0 Y$ P' Q  J/ A(D)counter值轉成 7-segment display" `: M0 M) c/ u0 ?) X
(E)free run timer: 為了 SW4的3~5秒,還有display閃爍
- {- `8 B! \: R5 J   例如: M級ripple counter, 第N級拉出約一秒,第N+2級拉出約4秒
% r1 @$ ?. _# _, m, z' K7 J5 K- e0 W
* k" n5 Z! C+ }& f8 D也就是這個問題,分成五個部份的電路,
5 x# m3 S/ ^- g$ _, k5 x或者思考的時候是五個部份
! M2 s" u* q$ p3 G0 L然後再去coding再一個entity之內
7#
 樓主| 發表於 2009-8-13 12:05:15 | 只看該作者

回復 6# 的帖子

感謝ajack大大的回覆9 }  _% `5 v% F. U5 j
小弟是剛學cpld沒多久! E+ ?  n9 a1 \* P
有點變成是用軟體的想法再做
  O7 C# I# m" Z# f正在努力改成從硬體思考
2 _3 |4 l7 b, z4 z& g: a小弟會從大大所說的方向去做看看5 f6 V7 X0 ?2 l2 N  B
謝謝大大的指教
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-6-18 06:39 AM , Processed in 0.152019 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表