Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] verilog程式問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-12-20 13:03:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想請問一下6 {6 f6 c  J) r6 u& k( ^
我想寫一個 輸入72個值 暫存起來 之後取5個最大值輸出$ e% j- O% T( I# j' ?
其餘的就丟掉,之後再輸入薪的72個值 再取5個最大值這樣,
% O$ s/ t& e( V就這樣一直做 請問我該如何寫才會有這些動作呢???5 K3 X! b, s1 m: r4 Q' a
我只會把值暫存起來,但是接下來如何取出72值當中5個最大值: t9 W% b& \* g2 Q0 o3 e$ d! j
我就不會了,請各位大大給個大概的方向,像是需要用到什麼指令等等的
, U6 Y! G+ x( C) S3 y% M% a謝謝各位了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-12-20 15:31:44 | 只看該作者
比較器...../ A9 p) B; {+ `/ L% N
有library可以用...0 @+ N( }3 D* ]7 u
不過你可能要考慮速度的問題....
3#
發表於 2007-12-20 18:56:04 | 只看該作者
您好
$ K4 @9 s. p& u" n% I應該可以參考各種排序的演算法
' Q# S6 `+ k% m0 P5 l理解演算法後,在想辦法寫code去實現
4#
發表於 2007-12-21 10:18:38 | 只看該作者
Verilog is a circuit function implement language , not an program function implement language.- j* G9 F# a! c$ T/ r9 p2 T
You must know the algorithm first , and do the architecture design , then implement with the verilog.
5#
 樓主| 發表於 2007-12-21 14:01:22 | 只看該作者
我現在打了此程式,但是動作不一樣, q2 `6 Y; K. I  B& U/ t
可以告訴我要怎麼改他的data_out動作嗎??
+ `( ^8 Z; Q4 ^1 H$ V$ pmodule abcd(Data_out, stack_empty, stack_full, Data_in, write_to_stack, read_from_stack, clk, rst);1 C1 a: X( O! [0 @9 i
parameter stack_width = 4;
& _5 V- Y- q/ e: g. _parameter stack_height = 8;2 P7 O3 o) a. v% c, b; Y9 u8 P
parameter stack_ptr_width = 3;
; G$ J$ p- t, h2 O# c0 x' O. X0 Y1 ]output [stack_width -1: 0] Data_out;7 F: @& R% @1 G+ z. F* i  v/ o
output stack_empty, stack_full;; z) w, `1 H( N- N
input [stack_width -1: 0] Data_in;# g, g; M# O- V- m& p% X, b
input clk, rst;
6 `7 j6 x# i  Ninput write_to_stack, read_from_stack;3 C  y  H7 c8 K2 W
  B+ r% |" j/ W; u  B% x. ]  s- _6 S
reg [stack_ptr_width -1: 0] read_ptr, write_ptr;1 O- C3 D* I- H
reg [stack_ptr_width : 0] ptr_diff;5 I2 q) o0 S6 G: c

6 {' O  i9 c. J% B5 S4 Mreg [stack_width -1: 0] Data_out;
/ U2 a6 A1 N5 \1 [" G2 qreg [stack_width -1: 0] stack [stack_height -1 : 0];
  q& b$ f9 m2 d9 S9 F8 M4 z5 s- u' K. P( O; t) y. c9 z+ s
assign stack_empty = (ptr_diff == 0) ? 1'b1 : 1'b0;
7 m( w0 O3 j/ B+ c" Hassign stack_full = (ptr_diff == stack_height) ? 1'b1: 1'b0;# a2 {  T$ N% t- s% o

4 \* o  I$ ^* S; K# Z3 Jalways@(posedge clk or posedge rst)begin:data_transfer6 L+ n, H: R7 t6 L! b# I! b
if (rst)begin
3 }# \$ b  G8 `0 i$ u Data_out <= 0;8 N  I5 W* b( `9 y4 k
read_ptr <= 0;
0 K' e& z1 ?- i: z write_ptr <= 0;6 U* X+ R/ H* F1 [* r2 D5 I
ptr_diff <= 0;0 n: m$ d( c. _  P3 ~* R& l
end" }: I; G) i$ i2 T6 X4 D
else begin' u) y3 U# Q0 V2 y% K
if((read_from_stack)&&(!stack_empty))begin) T: Z1 Q6 @; S8 L/ o0 }
  Data_out <= stack [read_ptr];# w2 o& j" u. c# c. [  e0 S' A
  read_ptr <= read_ptr +1;
% [8 O: N0 ]7 ?, H+ ]" [  ptr_diff <= ptr_diff -1;- f/ w3 d! w# z" r+ R" n2 i4 r
end5 q' M; X% h& P9 h, v; `; K) n% f
else if((write_to_stack)&&(!stack_full))begin% l7 a  j# f0 `
  stack [write_ptr] <= Data_in;
( Z+ h0 X: I# I  write_ptr <= write_ptr + 1;" g  X% \# F7 |- {  m- W) d
  ptr_diff <= ptr_diff + 1;5 \4 F5 k+ g! {, Y, L( z
  end
$ q$ I( f$ r+ y; E* M" |: E end
  k( l. T* u8 m6 b7 n" tend
- G# k& i  q, Q% dendmodule
6#
發表於 2007-12-21 17:10:38 | 只看該作者
你期望有什麼動作.....??
! w  s+ Z( w2 Y- X應該要說...你知道現在的code是什麼動作嗎...
7#
 樓主| 發表於 2007-12-22 14:24:25 | 只看該作者
我這個code我應該是(因為我不確定sry)
* n4 D, b$ W2 F3 @3 r他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
2 H9 Q* k" U1 l' Z$ H7 u而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
" X1 J1 c- l% v9 k2 Y0 D  U0 D$ u我覺得現再先請各位大大指導我 如何挑一個最大值輸出就好(因為我連1個都不知道如何挑5個呢)( x! s5 ]- ~3 h3 [1 U
所以我想先一步一步來 知道的請指導我一下 謝謝
8#
發表於 2007-12-22 20:49:26 | 只看該作者
您好
8 e: I& A5 _7 S# O0 a2 L請問你有去了解排序法嗎
7 G$ n- s: u4 }" c% O2 `0 \% s1 M以泡沫排序法為例n筆資料% Z$ X( s) M2 Z* U! B. L* Z) N
做n-1次比較就得到最大值
9#
發表於 2007-12-24 16:58:01 | 只看該作者
原帖由 posendoh 於 2007-12-22 02:24 PM 發表
% o2 W" T7 _$ A1 A+ a. a% x我這個code我應該是(因為我不確定sry)
- n6 h: r. [$ T$ ?他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)* K6 V& A  w7 q* M- O) Q2 M
而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣# q& I, f8 K0 w1 W( h9 O
我覺得現再先請各位大大指導我 如何挑一個最大值輸出 ...
/ p, S' L9 y, Z$ W6 C
$ Z, f: E* ?9 d0 r) g2 L  Z
我覺得還是不要用stack的方法會比較好..
* b) e3 r  z9 ~3 y! \1 M  N因為你一次要挑5個值,. S  q$ x2 F% p, b: Y' B: `
只要你一比完一個最大值,你的stack就會被清空了..
+ X6 d% ^2 f9 ?3 d& }7 a還是放到ram裡面比較實在.
( B; c8 z3 W  {  D: \0 Y& p3 r+ M0 @3 }4 r4 c
如何access ram,請參考你要用的chip user manual

評分

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

查看全部評分

10#
發表於 2007-12-25 03:42:59 | 只看該作者

回復 1# 的帖子

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

評分

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

查看全部評分

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 09:22 AM , Processed in 0.169010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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