Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的+ d$ Y+ O7 C, j+ [
原代码如下

  1. # s0 ~, J8 F5 \$ s; S
  2. # w" q# n- @! ]- s6 n$ Y( ^/ Z" V. ^: v
  3. CNT: process(CLR, WR_PTR, RD_PTR)7 N  f$ N; G+ M4 z) K# l1 a
  4.   variable change : integer;  , Q' E/ G- @! H+ g. \$ A6 A
  5. begin  
    2 K, A, p/ f0 \3 n- B8 \
  6.   if CLR = '1' then5 {$ ?$ R* T9 q7 E) @
  7.    count <= 0;# r# z- S% U$ B
  8.    change := 0;" ?+ s5 ?- W+ `& b9 N1 d
  9.   else
    9 |; {/ z' [. G& B; E
  10.    change := 0;
    0 c7 O# @6 ?, B4 s) r! g) @4 j
  11.    if WR_PTR'event then' i# J/ ?. c" [( R" A  q/ o! q) X
  12.     change := 1;" v4 M( q4 H8 U
  13.    end if;3 K/ I! g! |$ X7 b; e
  14.    if RD_PTR'event then
    ( O/ f6 `8 V- p
  15.     change := change - 1;0 M5 `& Q9 L7 C
  16.    end if;
    8 ^  R- k. R! w# S/ g% s- x5 G
  17.    count <= count + change;# m1 v0 i4 W1 V5 H8 i
  18.   end if;
    / s/ F5 u$ }6 s# p% T+ f
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。; ^  ?! y; T9 _) E
我想是用always@( WR_PTR)$ ]. Q: m' m' [+ A' v/ P: }1 ~$ y8 F5 ^
但是process(CLR, WR_PTR, RD_PTR)这一句已经用了always了,没办法,刚接触verilog,请大家帮帮忙
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-1-5 12:41:03 | 只看該作者
這個fifo程式有問題喔,沒有clock訊號,很奇怪.
3#
 樓主| 發表於 2009-1-6 16:31:33 | 只看該作者
这个FIFO程式有CLK的,我这里只是一部分代码,没有将所有代码贴出来,只是希望大家告诉我该怎么写if WR_PTR'event then
4#
發表於 2009-1-7 11:42:34 | 只看該作者
1. VHDL clock 語法好像不太對,應該是 if WR_PTR'event and WR_PRT='1' then
' _0 {4 }0 s, m4 G2 F) [2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?% l1 U3 Y- T0 z3 n. E6 K
3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------
    : e* W- \: D8 C! l* E. }3 @
  2. library IEEE;
    " d# g, W$ J! m' T  N
  3. use IEEE.std_logic_1164.all;9 Y, h+ k3 \4 X* F( i0 l" h$ \
  4. entity fifo is
    ) Z0 ]6 x- e1 Y& g1 ]
  5.         generic (2 x6 ^3 E/ {/ i4 L. p
  6.                 depth : positive := 16$ H# `+ l2 ~5 F5 m) V# B
  7.                 );        2 k3 b2 s/ n8 @6 s2 @* C0 A
  8.         port(2 M4 c. {0 a. G* a0 E- x+ X3 J6 c
  9.                 CLR   : in  std_logic;) H1 R  V) ?: U( ~
  10.                 WCLK  : in  std_logic;
    ( d6 d( r5 F1 i) e& `9 z
  11.                 WE    : in  std_logic;0 b) ~; x% y1 V- x: T  A" e
  12.                 RCLK  : in  std_logic;0 L4 |' ^. G9 V
  13.                 RE    : in  std_logic;
    6 K0 U+ V! S# J; H; L* t/ }$ N* _
  14.                 DATA  : in  std_logic_vector(7 downto 0);  S1 }9 I. N! |) E) g( f
  15.                 EMPTY : out std_logic;
      U  Y2 U. b% h# m5 x
  16.                 FULL  : out std_logic;) T+ X( ?% o/ p
  17.                 Q     : out std_logic_vector(7 downto 0)
    1 X. a9 A' I' }5 u. k; K4 x4 x$ Y
  18.         );
    # h$ ~& C4 w: f0 {& p! U$ {! k$ q4 Z
  19. end entity;* B# B! b' W# v' S
  20. library IEEE;: p0 U4 o9 ~0 q/ w
  21. use IEEE.std_logic_unsigned.all;
    " a$ s9 c- M! [& ~8 X. g7 y' c
  22. architecture behavior of fifo is
    9 [" r6 d/ ?7 F3 J* T8 q
  23.         constant fmax : positive := depth-1;       
    * C$ Y" C4 L/ x6 Z  i3 P- V
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);
    " p: \: I* J, l6 b
  25.         signal fifo_array : fifo_array_type;
    , e, A- B7 {+ |  U
  26.         signal WR_PTR : INTEGER range 0 to fmax;9 q/ w5 {+ V/ ~  u# \# d. ?' G
  27.         signal RD_PTR : INTEGER range 0 to fmax;
    2 z7 X) H' M3 }4 E. v8 F( M$ {( h
  28.         signal count  : INTEGER range 0 to depth;6 p; Q) b5 u/ L8 U+ a3 L
  29. begin& Y2 e# P0 ~7 g3 H
  30.         CNT: process(CLR, WR_PTR, RD_PTR)0 a- `/ B4 q6 f" \/ D" M4 f
  31.                 variable change : integer;               
    # ^1 ]5 B; \( @2 N
  32.         begin  % E$ \* Z- T4 D$ r& d# E1 o/ p8 X9 D
  33.                 if CLR = '1' then# \% z+ {% I8 N' W" E1 i
  34.                         count <= 0;
    9 i, I3 P$ w8 v3 i
  35.                         change := 0;
    8 l% l! O7 |! z
  36.                 else
    ( z2 U: D; ]) k0 [* G( ~5 U" H7 {5 w3 l
  37.                         change := 0;5 n0 B8 \! m5 y2 X7 c; z/ c+ a3 b
  38.                         if WR_PTR'event then
    9 _: V- E, _+ u! J/ A
  39.                                 change := 1;
    7 _# h$ S% P5 B. L% H% O) k" N
  40.                         end if;/ m/ [* F9 ^* W  d
  41.                         if RD_PTR'event then1 j  y$ h" L1 l1 h5 }9 Y. c
  42.                                 change := change - 1;( ]1 R9 {; ?7 d" I% ]
  43.                         end if;. K( S  b2 r; C% u1 J
  44.                         count <= count + change;: Q) p7 X! f! C$ d( W7 R
  45.                 end if;
    3 T) s# b9 b; i" B0 E
  46.         end process;        . ~( h/ ^  m, Q) d8 q: S7 K
  47.         STATUS: process(count)
    # `6 s8 K. Q4 `! u6 |. N& R! u
  48.         begin  
    " o3 ?; z: S( U& k+ g0 u
  49.                 if count=0 then
    7 |+ V, m4 x2 G( K
  50.                         FULL   <= '0';$ w( v$ P. T' y. O
  51.                         EMPTY  <= '1';
    & N9 Y* _$ h( D1 y
  52.                 elsif count=depth  then6 s+ x/ Z% `7 [$ y
  53.                         FULL   <= '1';
    # ]% M! k8 |/ X0 F  d4 K
  54.                         EMPTY  <= '0'; 7 [3 E1 n* b# J" q
  55.                 else       
    & ~# t$ y" I4 S& V% N9 b5 @
  56.                         FULL   <= '0';
    $ D- @8 k2 u: t8 C! X* k
  57.                         EMPTY  <= '0'; 1 j2 _. `3 e0 x5 I4 i# c% H
  58.                 end if;                        , g! \" _) |( [- C" t6 t" y4 Q
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK)
    6 m0 a" A: e3 J( A
  2.         begin5 D: R+ C; R& ?5 O) x* t! h! q0 @
  3.                 if CLR = '1' then
      k. u$ Y* N1 `1 A, n6 Y
  4.                         for INDEX in fmax downto 0 loop
    : Q$ B2 ^# M& l
  5.                                 fifo_array(INDEX) <= (others => '0');
    1 Q. I; g$ u. E# z3 w
  6.                         end loop;" ]: B8 Y, a8 N* d6 [
  7.                         WR_PTR <= 0;
    6 s* [8 r  y, f) B, U( X
  8.                 elsif rising_edge(WCLK) then
    ( t! t! R0 T9 o" g
  9.                         if WE = '1' and count<depth then
    - S" Z- F4 r  M# `
  10.                                 fifo_array(WR_PTR) <= DATA;! l% F' O, f/ n! T1 b! p3 [
  11.                                 -- move pointer
      r" Z8 j. q. ?( I; q/ v& \! p
  12.                                 if WR_PTR=fmax then
    4 M' e8 _3 A! R: t8 h( k' Y
  13.                                         WR_PTR <= 0;
    8 l# n, S# x' A  \
  14.                                 else WR_PTR <= WR_PTR + 1;
    6 O! G7 D6 G2 U
  15.                                 end if;
    " g7 L) F# l4 ^) l
  16.                         end if;$ S+ w% ^' f2 \+ r" d& r6 c
  17.                 end if;
    & o8 \. ?+ @- N5 _$ a$ l. L
  18.         end process;
    ; v6 R2 g" u. \2 x+ d
  19.         FREAD: process (CLR, RCLK)4 C3 M. \" z/ I! ?2 {+ g: l8 o
  20.         begin
    , _' }" }, l' R9 z: x
  21.                 if CLR = '1' then
    " M6 }' G6 w6 p. {: h6 ^
  22.                         RD_PTR <= 0;! l9 T  K9 X+ |
  23.                 elsif falling_edge(RCLK) then
    : j. O& [$ a3 n( W) t
  24.                         if RE = '1' and count>0 then9 x: b3 h9 O7 \, T4 a+ E1 x
  25.                                 Q <= fifo_array(RD_PTR);+ N1 T: x& b: j  x- C9 r6 F
  26.                                 -- move pointer
    ' a/ ?, }( V7 p. a1 y
  27.                                 if RD_PTR=fmax then
    2 A7 I1 g9 ?5 A. d# ]
  28.                                         RD_PTR <= 0;
    9 A5 C1 x0 Z3 Q9 s* J4 N" [
  29.                                 else RD_PTR <= RD_PTR + 1;) H1 f( U/ X2 ~2 U- n
  30.                                 end if;. m& Z' v+ `- q: i: O( k
  31.                         end if;
    0 F! p7 I0 P# a$ q5 R" X
  32.                 end if;0 ^4 D6 ?: V4 v- v: I' ?( m0 x% t1 @6 z
  33.         end process;- ^0 d  }$ j( I% j6 I9 C! L" x, A3 N
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 08:34 AM , Processed in 0.139518 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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