Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] verilog程式問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-12-20 13:03:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想請問一下
+ o) |: ]' \7 D. }1 K我想寫一個 輸入72個值 暫存起來 之後取5個最大值輸出- O  R; d$ r5 Q- p: ~4 Q2 |6 u
其餘的就丟掉,之後再輸入薪的72個值 再取5個最大值這樣,
) d9 m2 R9 }: d/ p  T就這樣一直做 請問我該如何寫才會有這些動作呢???$ o. S0 H0 C5 u- Z4 ^7 {: `2 p8 h; ~
我只會把值暫存起來,但是接下來如何取出72值當中5個最大值4 k1 |; R& u9 o
我就不會了,請各位大大給個大概的方向,像是需要用到什麼指令等等的
! t( o& ~& M- v謝謝各位了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-12-20 15:31:44 | 只看該作者
比較器.....
. ~& ?0 c6 ]' `9 W9 @1 T8 z* l有library可以用.... k: A: J/ F) O% K( i
不過你可能要考慮速度的問題....
3#
發表於 2007-12-20 18:56:04 | 只看該作者
您好
+ B& l7 G- H, }8 s' p' K應該可以參考各種排序的演算法
% ]* h4 @2 ]2 O4 a5 u理解演算法後,在想辦法寫code去實現
4#
發表於 2007-12-21 10:18:38 | 只看該作者
Verilog is a circuit function implement language , not an program function implement language.. t$ X; l+ \" i+ v& f- Z
You must know the algorithm first , and do the architecture design , then implement with the verilog.
5#
 樓主| 發表於 2007-12-21 14:01:22 | 只看該作者
我現在打了此程式,但是動作不一樣" m: T1 D& J5 H. t' g$ P
可以告訴我要怎麼改他的data_out動作嗎??
; L; E  e5 f$ o8 M7 @1 _module abcd(Data_out, stack_empty, stack_full, Data_in, write_to_stack, read_from_stack, clk, rst);4 _8 `9 I3 P. L) s; u, M
parameter stack_width = 4;5 k: m( X( H! R1 d1 j
parameter stack_height = 8;' l8 |% ?3 u3 X/ Z( `; h* L
parameter stack_ptr_width = 3;0 p9 I- k! M6 l8 t/ ]! M
output [stack_width -1: 0] Data_out;
# n) [9 n& `( Q$ loutput stack_empty, stack_full;
8 `6 O. `* M) K6 B0 Kinput [stack_width -1: 0] Data_in;3 `* h3 a& G4 w, \
input clk, rst;1 g/ n0 `# h/ a+ h, @9 M: o
input write_to_stack, read_from_stack;
7 K0 P. z( v; Y4 a' o# X# l
9 `" e, o# Y3 o0 V: Xreg [stack_ptr_width -1: 0] read_ptr, write_ptr;
& ?7 x9 U7 X+ [' q6 C& Qreg [stack_ptr_width : 0] ptr_diff;& z8 Q7 ]0 S- H* r) o5 }2 ~( T
$ K' p! {; i% d8 g8 w3 a
reg [stack_width -1: 0] Data_out;/ C6 E1 t8 `. M# y" l; a1 n  K
reg [stack_width -1: 0] stack [stack_height -1 : 0];9 p8 r' m& F# e" a; \1 b8 |

! L1 A% G, Q5 r) Passign stack_empty = (ptr_diff == 0) ? 1'b1 : 1'b0;
$ |% T% P- L% U, s8 \- Wassign stack_full = (ptr_diff == stack_height) ? 1'b1: 1'b0;
0 h$ f, Q# H. T' U; V, }" B4 n1 N: ^% l5 W$ J1 p4 a6 h6 _( ]
always@(posedge clk or posedge rst)begin:data_transfer6 u) P5 \( ]: n* b/ e# C1 L
if (rst)begin, V' p: ~1 g2 d) U* z; m/ c
Data_out <= 0;/ i) ]4 Z$ V* O; d
read_ptr <= 0;
9 H# @% E; b$ a% f' Y  S- |& }4 r write_ptr <= 0;
9 V* |- P" n7 ?, J" B) | ptr_diff <= 0;+ `' }. G) ?& h2 @
end
7 `7 B$ b. n4 l' F# h" Felse begin
# B4 ?* B1 L  r: o, ] if((read_from_stack)&&(!stack_empty))begin- u+ t! {; q4 m
  Data_out <= stack [read_ptr];
1 K& v% ^7 Z6 U; f3 p( S: }; F  read_ptr <= read_ptr +1;
5 v  o: L4 ^% M  ptr_diff <= ptr_diff -1;
& d5 u9 I7 i6 h% v4 k end
7 j, n5 H: m7 [2 r( d else if((write_to_stack)&&(!stack_full))begin& z+ J) W4 U5 e3 H
  stack [write_ptr] <= Data_in;, n* {! p6 e  Q1 T/ E/ U# `
  write_ptr <= write_ptr + 1;# e) a- O6 {9 X$ l% k+ U3 P$ ^
  ptr_diff <= ptr_diff + 1;
6 ?( a9 S* n$ ^* A) d! [  end
* g; F8 H+ h4 I# ^1 g8 Q end! L" J* Q% [& t! K3 m/ c/ k1 w) h3 z
end
7 |) R9 `! J; sendmodule
6#
發表於 2007-12-21 17:10:38 | 只看該作者
你期望有什麼動作.....??
0 m2 T! R- ^2 j# N6 T應該要說...你知道現在的code是什麼動作嗎...
7#
 樓主| 發表於 2007-12-22 14:24:25 | 只看該作者
我這個code我應該是(因為我不確定sry)
& u$ _5 w& N- e  ^他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
% S3 w. X* _( g: g而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣
  E  @6 ]8 i0 ]) O8 O我覺得現再先請各位大大指導我 如何挑一個最大值輸出就好(因為我連1個都不知道如何挑5個呢)
0 j* d  \, I6 a4 W  c& N所以我想先一步一步來 知道的請指導我一下 謝謝
8#
發表於 2007-12-22 20:49:26 | 只看該作者
您好
5 c! F' N' [( }+ w# W+ o! @( m7 E請問你有去了解排序法嗎
6 K! v& O* a  }# Z, R# d以泡沫排序法為例n筆資料
9 i% j8 f2 S( I% x做n-1次比較就得到最大值
9#
發表於 2007-12-24 16:58:01 | 只看該作者
原帖由 posendoh 於 2007-12-22 02:24 PM 發表 0 C; L* e% _- \7 \7 O- S
我這個code我應該是(因為我不確定sry)
- G) Q# w( _" q7 N1 Q* g$ t他把數值堆疊在暫存器裡,然後一個值一個值輸出(是這樣嗎??)
4 L: W* D$ g$ X8 }0 k2 e8 c而我要的是 堆疊在暫存器的值,挑5個最大值輸出 其他丟掉這樣, {) _( X1 |) G$ c1 J+ ^
我覺得現再先請各位大大指導我 如何挑一個最大值輸出 ...
0 t5 n& @2 H$ V, p( ~

# X$ e1 n5 k& `0 v, O4 v/ I( f我覺得還是不要用stack的方法會比較好..- `) s. s4 W* S7 e& {
因為你一次要挑5個值,
& l7 H$ Y* \+ {7 ?( G7 f% y只要你一比完一個最大值,你的stack就會被清空了..
7 J" x" M0 K2 p7 D還是放到ram裡面比較實在.
( Z' z$ Y' `- ]/ w3 Z* S
7 s: i. f$ i6 N/ c% R6 Q如何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 07:28 AM , Processed in 0.171009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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