Chip123 科技應用創新平台

標題: verilog程式問題 [打印本頁]

作者: posendoh    時間: 2007-12-20 01:03 PM
標題: verilog程式問題
我想請問一下& C* R* V' a8 b" X3 ^
我想寫一個 輸入72個值 暫存起來 之後取5個最大值輸出
: j5 o* R, L0 g; l其餘的就丟掉,之後再輸入薪的72個值 再取5個最大值這樣,
4 B& K+ Z) w% \3 W5 t就這樣一直做 請問我該如何寫才會有這些動作呢???" i+ ]; [! ]! X$ l2 w
我只會把值暫存起來,但是接下來如何取出72值當中5個最大值
8 x; N! a9 ~2 `2 T我就不會了,請各位大大給個大概的方向,像是需要用到什麼指令等等的
" M0 F2 M3 F: h謝謝各位了
作者: kolong    時間: 2007-12-20 03:31 PM
比較器.....1 x# z5 ~7 E2 A  S6 [6 v. z9 E( ^
有library可以用...1 _: w$ ^5 ^- l- g' J& M
不過你可能要考慮速度的問題....
作者: addn    時間: 2007-12-20 06:56 PM
您好
7 Y5 b; V9 V* K3 q) j  i/ T應該可以參考各種排序的演算法
5 t( D& ^; h- W2 t7 u' d( M理解演算法後,在想辦法寫code去實現
作者: masonchung    時間: 2007-12-21 10:18 AM
Verilog is a circuit function implement language , not an program function implement language.% z4 U& \0 i8 l( I2 Q6 ~, Y% ]. t  @
You must know the algorithm first , and do the architecture design , then implement with the verilog.
作者: posendoh    時間: 2007-12-21 02:01 PM
我現在打了此程式,但是動作不一樣$ J% i9 |" x4 U& n; |6 I3 b" |
可以告訴我要怎麼改他的data_out動作嗎??
( I2 j$ b5 d' `2 w3 vmodule abcd(Data_out, stack_empty, stack_full, Data_in, write_to_stack, read_from_stack, clk, rst);
1 W1 l1 v4 z/ n) G: Cparameter stack_width = 4;
  o" e" m- t. O. U8 i; [parameter stack_height = 8;
7 o& a/ h1 Q$ }) Fparameter stack_ptr_width = 3;5 Z- {- r; e1 v
output [stack_width -1: 0] Data_out;
+ p$ h# A4 I: g. ]% poutput stack_empty, stack_full;
8 a5 Y# c1 \, _: Z& z( P4 @9 }0 W! Sinput [stack_width -1: 0] Data_in;$ P4 g1 L2 I3 Z  _, J. l# Y  J0 O
input clk, rst;, n/ @* t$ `2 N
input write_to_stack, read_from_stack;+ b0 ]% p& J- B) n# i. F9 A

$ c3 Z. f- Z) S+ p$ [! V# xreg [stack_ptr_width -1: 0] read_ptr, write_ptr;
$ F$ v2 u9 a6 d  H" ]& Qreg [stack_ptr_width : 0] ptr_diff;
$ V) O" f& O6 W  C. J  \, K- G/ K/ O6 F
reg [stack_width -1: 0] Data_out;% L" U/ G7 r% y- O" {, D
reg [stack_width -1: 0] stack [stack_height -1 : 0];
, C, K+ H2 G/ e) U* R& |  t, ~0 f) d, i  m$ Z0 p7 z) a5 q
assign stack_empty = (ptr_diff == 0) ? 1'b1 : 1'b0;
4 j' `/ \2 a" Rassign stack_full = (ptr_diff == stack_height) ? 1'b1: 1'b0;
) x) W! e8 x! S8 |& a  y
' d3 y2 x+ |% [) `# j+ e+ D$ walways@(posedge clk or posedge rst)begin:data_transfer
0 F! V7 g$ ~6 n& P) o7 g" qif (rst)begin3 y; W2 _1 n. {
Data_out <= 0;
( S+ i% Y9 T+ e( K2 c) h read_ptr <= 0;
( F7 d- |  d8 R( @1 v" F4 O write_ptr <= 0;  T; X( e" @- s4 g, q4 s& E4 ]
ptr_diff <= 0;2 B5 m9 T5 V+ s3 r: U, c) {7 p* [
end$ A: r. M8 _# ~/ O+ g* J/ m
else begin0 c- Q$ _- [- \6 L+ T
if((read_from_stack)&&(!stack_empty))begin2 I/ s% i- x* j4 R" R
  Data_out <= stack [read_ptr];
) l7 B  i) ]3 l  read_ptr <= read_ptr +1;8 R! U3 q, s8 y7 Y
  ptr_diff <= ptr_diff -1;9 Z  _2 b6 l/ Q. V0 I2 R) l
end: t3 Y! f) ~. p9 ?3 j- `2 }- O2 g
else if((write_to_stack)&&(!stack_full))begin4 I4 J3 s3 \8 Y. \* G, c
  stack [write_ptr] <= Data_in;. p0 @9 X: F) O* ?
  write_ptr <= write_ptr + 1;
; p: j: |6 d& i+ ]. q" x  ptr_diff <= ptr_diff + 1;
( I. J0 U# }% }+ x  end, o4 f$ \+ P, e$ @) R' l' f
end
' g  p' u6 K% Q4 Q+ i) O4 ]& Cend# K& |# p  k% f: X0 V( E$ _
endmodule
作者: kolong    時間: 2007-12-21 05:10 PM
你期望有什麼動作.....??
6 g; r6 ~, l  m應該要說...你知道現在的code是什麼動作嗎...
作者: posendoh    時間: 2007-12-22 02:24 PM
我這個code我應該是(因為我不確定sry)& P" Z& D! W: J7 Q, J# I5 \
他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)7 q7 w9 l- m9 h- J
而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
8 x" M3 l% ?8 u2 J6 q  W我覺得現再先請各位大大指導我 如何挑一個最大值輸出就好(因為我連1個都不知道如何挑5個呢)
9 Q% s1 r. W& J# Y+ C+ E! H- v8 A所以我想先一步一步來 知道的請指導我一下 謝謝
作者: addn    時間: 2007-12-22 08:49 PM
您好
' n5 a8 _# C' [1 i% I( m# k請問你有去了解排序法嗎" q, F- \/ J! Z
以泡沫排序法為例n筆資料% B* U3 e' U- {( u* u  _$ \1 w* e
做n-1次比較就得到最大值
作者: kolong    時間: 2007-12-24 04:58 PM
原帖由 posendoh 於 2007-12-22 02:24 PM 發表
  g+ b' ^; G: Z我這個code我應該是(因為我不確定sry)
/ O  h) R0 Q& Y$ s# c他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
- q* U6 S* V' L4 l) A) Q. J而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣. o; J6 h% L2 C  F; L; a
我覺得現再先請各位大大指導我 如何挑一個最大值輸出 ...

  w' }$ X1 l# m4 g& ^# w! d' c1 Z& h2 p% _1 ~/ u, G! w
我覺得還是不要用stack的方法會比較好..+ {6 t; @  r! Q3 W, `; l
因為你一次要挑5個值,
% ]0 D# F9 f( j: F& m只要你一比完一個最大值,你的stack就會被清空了..; S0 U# L* g" l' p: J. h2 R, j7 ]
還是放到ram裡面比較實在.
- R. X! j$ X2 T/ S6 F# t& R8 N3 h8 v, Y. Y& v" X% r, B
如何access ram,請參考你要用的chip user manual
作者: garywlee    時間: 2007-12-25 03:42 AM
標題: 回復 1# 的帖子
我覺得你應該使用一個可以存放六個值的buffer。並且在reset時,填滿最小的數值。接著對於每一個新加入的資料,將他放在第六個的位置,接著對這六個資料進行進行bubble sort的比較。 當你所有的資料,經過這個提供bubble sort模組後,存在於buffer內的頭五個資料就是你要的輸出了。講起來是容易,不過寫起來倒還是有點複雜就是了,尤其是這個bubble sort的部份。




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2