Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] verilog程式問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-12-20 13:03:46 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
我想請問一下
$ W5 v, {& N/ W8 M9 Y: ~# U8 Z我想寫一個 輸入72個值 暫存起來 之後取5個最大值輸出; U" @, x3 [& `8 z6 k5 z! m+ P
其餘的就丟掉,之後再輸入薪的72個值 再取5個最大值這樣,8 ~; \8 B7 a+ }( o7 g' s5 r0 ]
就這樣一直做 請問我該如何寫才會有這些動作呢???3 R7 \( m, `0 A0 I& s
我只會把值暫存起來,但是接下來如何取出72值當中5個最大值
/ n7 j$ z8 h0 t& i0 K' t) x( U+ l. ]我就不會了,請各位大大給個大概的方向,像是需要用到什麼指令等等的
$ Z5 [2 y) M0 T/ C) q謝謝各位了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
10#
發表於 2007-12-25 03:42:59 | 只看該作者

回復 1# 的帖子

我覺得你應該使用一個可以存放六個值的buffer。並且在reset時,填滿最小的數值。接著對於每一個新加入的資料,將他放在第六個的位置,接著對這六個資料進行進行bubble sort的比較。 當你所有的資料,經過這個提供bubble sort模組後,存在於buffer內的頭五個資料就是你要的輸出了。講起來是容易,不過寫起來倒還是有點複雜就是了,尤其是這個bubble sort的部份。

評分

參與人數 1Chipcoin +3 收起 理由
masonchung + 3 言之有物!

查看全部評分

9#
發表於 2007-12-24 16:58:01 | 只看該作者
原帖由 posendoh 於 2007-12-22 02:24 PM 發表
% z8 m4 b# ?9 t9 V+ w  `我這個code我應該是(因為我不確定sry)9 k; A( G* M7 h% z& s
他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)+ v& V( K8 p8 s
而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
/ m1 H: i/ V* ]- Q; z我覺得現再先請各位大大指導我 如何挑一個最大值輸出 ...

3 w  n' F$ Y; C5 O5 T$ x, z
# q# }2 M1 H4 P3 A我覺得還是不要用stack的方法會比較好..
: l8 j4 e- [  t因為你一次要挑5個值,0 H8 O2 m& V2 B. m# K
只要你一比完一個最大值,你的stack就會被清空了..- M1 p( F8 h1 T, W& b* o. k
還是放到ram裡面比較實在.  X# q' B4 n* o5 r, h# e6 V9 z7 h
1 M* S# N( B" M6 R- `5 T
如何access ram,請參考你要用的chip user manual

評分

參與人數 1Chipcoin +3 收起 理由
masonchung + 3 感謝經驗分享!

查看全部評分

8#
發表於 2007-12-22 20:49:26 | 只看該作者
您好+ G7 f% l! U. n8 \+ l' z
請問你有去了解排序法嗎
. G- `% W- q6 y+ B以泡沫排序法為例n筆資料* H  w+ H2 ^9 K3 B/ a* r$ z, p
做n-1次比較就得到最大值
7#
 樓主| 發表於 2007-12-22 14:24:25 | 只看該作者
我這個code我應該是(因為我不確定sry)
2 @3 q7 \9 m* H他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)( `6 n7 e; G- m. D+ d5 ?1 [: D: M
而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
+ o! g6 a: g" e1 }# X5 e" l5 k! s# Q我覺得現再先請各位大大指導我 如何挑一個最大值輸出就好(因為我連1個都不知道如何挑5個呢)+ p2 l! s6 E8 r4 i- H: O& s
所以我想先一步一步來 知道的請指導我一下 謝謝
6#
發表於 2007-12-21 17:10:38 | 只看該作者
你期望有什麼動作.....??+ k# E# B, B! o/ y* x
應該要說...你知道現在的code是什麼動作嗎...
5#
 樓主| 發表於 2007-12-21 14:01:22 | 只看該作者
我現在打了此程式,但是動作不一樣
, A6 k/ ?7 B) `) I可以告訴我要怎麼改他的data_out動作嗎??
* `4 i* l! _7 [' J9 Q8 O& i% bmodule abcd(Data_out, stack_empty, stack_full, Data_in, write_to_stack, read_from_stack, clk, rst);3 b* g$ V; t' d! l5 T
parameter stack_width = 4;
6 n) p0 ~* W. D2 }) e7 J( pparameter stack_height = 8;3 E! K- r- z: z  B& l
parameter stack_ptr_width = 3;
/ v+ P( j* e; P% H9 zoutput [stack_width -1: 0] Data_out;
. j; v& H5 c1 h8 m/ z) y- W4 Noutput stack_empty, stack_full;  X6 _' R8 _4 E2 h; x$ I+ U
input [stack_width -1: 0] Data_in;* @1 ]% _4 `3 O) j9 A! i! E6 B1 T+ ^
input clk, rst;" k. P. ~5 a+ L7 g& p4 x6 ]
input write_to_stack, read_from_stack;. [/ }* l2 c& ^
1 c9 {& K9 [& E; Z9 `
reg [stack_ptr_width -1: 0] read_ptr, write_ptr;
* P3 N/ t7 P: f# ?reg [stack_ptr_width : 0] ptr_diff;
) Z) y: u  L$ w( @% B$ C" ^; k7 n! e0 H
reg [stack_width -1: 0] Data_out;# `3 }3 p2 A0 R8 w
reg [stack_width -1: 0] stack [stack_height -1 : 0];
4 i; R% E, P: Y" u" \) V: B
. l* b, C0 W4 c; jassign stack_empty = (ptr_diff == 0) ? 1'b1 : 1'b0;1 D% f* G0 i+ Z
assign stack_full = (ptr_diff == stack_height) ? 1'b1: 1'b0;3 v: ~; H/ i7 \3 o# S! }

4 A8 g% y0 ?- z' _always@(posedge clk or posedge rst)begin:data_transfer
7 w4 F6 L9 B: ]* p$ w2 b/ eif (rst)begin1 n3 ~! w: ]0 f1 O* u0 k7 s6 n' \
Data_out <= 0;, v! m/ N0 m% r6 d8 s' q
read_ptr <= 0;& M6 W5 V1 w: f& L2 s4 X
write_ptr <= 0;
( g- ~% G8 @. u# b ptr_diff <= 0;
7 @- d% w5 D  A  n5 kend
1 J( E* V* w) p+ {: f* L  J0 w9 zelse begin& ^9 d* _. n6 @/ b  X
if((read_from_stack)&&(!stack_empty))begin2 E, ^3 X  F- }0 ]
  Data_out <= stack [read_ptr];7 r3 N- k8 k8 K; g( ]" t
  read_ptr <= read_ptr +1;5 \% y( v3 _7 _* B+ `+ H; D* w
  ptr_diff <= ptr_diff -1;* T% m9 ]6 q: }3 V+ r6 E$ H% ?
end
3 k; z$ d" F) \! v* W1 t% x" \4 E else if((write_to_stack)&&(!stack_full))begin0 f) H  _5 z; B3 Y- R
  stack [write_ptr] <= Data_in;3 l1 z1 Y8 L% Z5 x
  write_ptr <= write_ptr + 1;
$ n  a4 q# `2 ~) w/ D  ptr_diff <= ptr_diff + 1;
2 k7 J% E/ w9 e. D# n4 ^+ e, k2 d  end
5 P! j, p! L' }' ]' y% o" Q end; P( V$ D* ~5 s8 @6 [6 U9 g# f2 j0 d
end$ J  ^6 T8 O7 E9 n5 X+ l
endmodule
4#
發表於 2007-12-21 10:18:38 | 只看該作者
Verilog is a circuit function implement language , not an program function implement language.( Z) h/ g: v4 ^2 U
You must know the algorithm first , and do the architecture design , then implement with the verilog.
3#
發表於 2007-12-20 18:56:04 | 只看該作者
您好
5 U1 K, Q2 r; X" M( j8 m3 u& ^) c應該可以參考各種排序的演算法
, N% o1 t- p0 h4 t# q' d理解演算法後,在想辦法寫code去實現
2#
發表於 2007-12-20 15:31:44 | 只看該作者
比較器.....% i8 z+ `0 R9 U. N$ c
有library可以用...
. o* r8 G, L% C5 N3 |6 `  U$ H不過你可能要考慮速度的問題....
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 07:19 AM , Processed in 0.180011 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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