Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的/ ~8 g2 Q# V$ j/ d; c
原代码如下
  1. % \1 C4 Y; p9 d9 U) Y

  2. 6 g9 C3 J) J- g% ^- f
  3. CNT: process(CLR, WR_PTR, RD_PTR)! b4 I* @' U9 o4 \' \7 \9 Q3 \
  4.   variable change : integer;  ! Y9 T# K. N# W* i! A* U
  5. begin  
    % w4 T9 c* t5 Q' z4 T" j
  6.   if CLR = '1' then
    / q* p% s, W( o4 Z
  7.    count <= 0;+ M6 P; M" F- M
  8.    change := 0;/ a5 X/ z1 y+ d) H. C' B- U
  9.   else
    9 L  h% G* P7 u. V
  10.    change := 0;
    # A1 ]4 G. H% v4 ]4 {6 k5 o2 z
  11.    if WR_PTR'event then4 h( h) J) ^/ }2 S- O4 e
  12.     change := 1;
    / N  q$ F' l: L0 _+ z" P% {# `
  13.    end if;
    * O* p( t8 g/ g% [% ^3 c7 R, ]
  14.    if RD_PTR'event then
    0 I/ L/ ~# a  e
  15.     change := change - 1;: L! U; g& G; h6 Z/ J0 Z  M
  16.    end if;
      M7 O9 T6 c  F* o- _
  17.    count <= count + change;' c  ~1 ]) X9 K9 U# H" S$ ~
  18.   end if;; Z% f* W+ L# e, H
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。( e1 s, |. B4 F7 s9 s" R
我想是用always@( WR_PTR)
1 H6 U. J5 C' a8 _但是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
, D( T) ~( D! J6 n+ d% K2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?
$ s% f% X1 M* b" q3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------
    1 g. }0 H9 z  D5 v( ^7 I) L
  2. library IEEE;
    9 ?9 A1 y! h3 \5 y
  3. use IEEE.std_logic_1164.all;: e# s  K  T9 U5 S
  4. entity fifo is2 B" r* @+ ~& a$ C2 C& o! r+ n
  5.         generic (
    & {: ]' o5 {. E9 m* k. c8 l
  6.                 depth : positive := 16% k& b* Q* ?7 G2 z2 u  v! c
  7.                 );        : G+ a# m( s$ b
  8.         port(2 G0 [& F! d. Z; Q8 D: W
  9.                 CLR   : in  std_logic;
    * X3 P9 E, i4 F% d' k
  10.                 WCLK  : in  std_logic;% v: ]6 n% o( E+ a# X2 V
  11.                 WE    : in  std_logic;
    ' A9 D6 {  K- y" r
  12.                 RCLK  : in  std_logic;
    7 n7 b( }; \3 {- O
  13.                 RE    : in  std_logic;
    ) f% P  i1 [2 l* g
  14.                 DATA  : in  std_logic_vector(7 downto 0);
    ( A+ w$ r! T7 H1 R
  15.                 EMPTY : out std_logic;. _/ O: d1 I: l' Q5 [. }- `0 }
  16.                 FULL  : out std_logic;
    + Y1 n" C( F5 L* j% @8 d$ g
  17.                 Q     : out std_logic_vector(7 downto 0)5 y) h: E! `0 Q) a. I/ B2 U
  18.         );- z: s/ A2 A  [" o4 L
  19. end entity;
    4 ]) g  {- j0 u
  20. library IEEE;& l; J2 Y# l6 c& f7 k( i% ~; O
  21. use IEEE.std_logic_unsigned.all;
    9 u" t$ e9 t+ Z' C8 ^
  22. architecture behavior of fifo is
    + ?1 m7 ?) K( L+ F5 L( s, i7 ]
  23.         constant fmax : positive := depth-1;       
    ' X/ n7 w: g0 H- J0 z* a0 c* t
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);* Q. i6 V: @7 f* S
  25.         signal fifo_array : fifo_array_type;
    : e2 w# V9 ~) w6 ?
  26.         signal WR_PTR : INTEGER range 0 to fmax;
    7 V. x) ]+ x7 X5 @' J. A1 i
  27.         signal RD_PTR : INTEGER range 0 to fmax;  M. P1 r$ x: s' E8 O" E+ S
  28.         signal count  : INTEGER range 0 to depth;* n; L1 [4 K0 D2 C
  29. begin  n/ @) ?5 c0 K; N; f( p( g) o
  30.         CNT: process(CLR, WR_PTR, RD_PTR)
    ( q' [) D: F' V* y# Z" G, H
  31.                 variable change : integer;                ' N+ v3 Q) O8 e6 q
  32.         begin  
    ; x; c; f4 j9 y7 s/ t* n% K5 F
  33.                 if CLR = '1' then) j  \0 M8 \( ?6 T9 I/ _! ^  D
  34.                         count <= 0;7 y4 W- w! D+ D0 g7 i8 |, @
  35.                         change := 0;# J2 y! d, M4 q1 N
  36.                 else4 ^& ~. u% X' ?# x. K1 x
  37.                         change := 0;+ d# O7 Y2 t) o5 d& D
  38.                         if WR_PTR'event then
    ' C, t9 D$ X. n4 _
  39.                                 change := 1;1 X6 _- M( M' C( c
  40.                         end if;" ]. Y0 f# r9 ?/ K# Y
  41.                         if RD_PTR'event then
    * p; N4 |' i. c/ Y( K0 M6 u' S* K
  42.                                 change := change - 1;
    6 U& e' I: u5 i2 @9 o/ R
  43.                         end if;8 F; ]2 w* Z4 e8 d2 j5 I3 s6 q
  44.                         count <= count + change;- |4 w: b. p) X3 q5 i
  45.                 end if;" p! ^& u& s) p; F  v
  46.         end process;       
    ! I& N( @8 L0 Y0 J& p
  47.         STATUS: process(count)
    * |$ @! z- g0 c' S' G$ G5 y9 U
  48.         begin  
    4 `; O* z. j* S4 j3 g
  49.                 if count=0 then
    5 Q! |5 I+ i  e! [7 A
  50.                         FULL   <= '0';* e6 c5 S9 d9 {3 w, P
  51.                         EMPTY  <= '1';- ]( Y$ p6 x9 ?; B& u; j4 S
  52.                 elsif count=depth  then
    : D: o/ L- H5 x' R2 K
  53.                         FULL   <= '1';
    ) T' Z0 K$ y3 c0 Q1 a
  54.                         EMPTY  <= '0';
    % }1 P6 [/ q6 n
  55.                 else        9 x. h- J. t2 j9 A1 r! N8 `
  56.                         FULL   <= '0'; 5 V6 N/ B4 f" g1 b, N: J
  57.                         EMPTY  <= '0';
    8 h0 T' E! j% u$ h+ @
  58.                 end if;                        - Q) J3 I, T3 H, \. e
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK)
    1 n9 L) w$ n6 z6 Z+ Z
  2.         begin
    0 L( u7 l& J* E+ p" a
  3.                 if CLR = '1' then
    ( `! o2 o$ [2 o4 X: P/ L
  4.                         for INDEX in fmax downto 0 loop8 s5 a6 ?, c( H) K  p5 {+ S
  5.                                 fifo_array(INDEX) <= (others => '0');
    0 o! q; |! C; y1 J. X" V
  6.                         end loop;
    1 |7 M, y2 a* T. I0 [
  7.                         WR_PTR <= 0;
    7 R* y0 A2 D+ S. ~! p1 b
  8.                 elsif rising_edge(WCLK) then! g7 i& g, f! u! V* ~
  9.                         if WE = '1' and count<depth then
    6 x5 M& O9 ~' N; p( G. q: t
  10.                                 fifo_array(WR_PTR) <= DATA;0 A' J3 u4 e# _# W9 @2 G
  11.                                 -- move pointer- h, c) p" o, U* Z$ n9 `
  12.                                 if WR_PTR=fmax then & A3 ?$ a6 V% b5 y" ^3 G8 l
  13.                                         WR_PTR <= 0; 8 n% U% _& i3 J! M- U1 T9 }$ a+ a+ c8 u
  14.                                 else WR_PTR <= WR_PTR + 1;% N8 g" \, \4 ^2 z) T% p
  15.                                 end if;" q, e- v  `4 r
  16.                         end if;, a( z/ q5 ?; Y; b( e# J
  17.                 end if;- x$ ]& D6 v3 _1 S' e
  18.         end process;) A) K/ P$ ?; m6 J
  19.         FREAD: process (CLR, RCLK)
    1 V$ x, N, P! |* c5 M! {
  20.         begin0 Q& h& T6 {( m) @5 r; O1 g  j
  21.                 if CLR = '1' then6 ~, r$ c4 _* _4 I! M
  22.                         RD_PTR <= 0;! w" h: |( l) ?4 f/ r" w9 Z6 w
  23.                 elsif falling_edge(RCLK) then  |6 J# f% _0 q  W
  24.                         if RE = '1' and count>0 then
    / Z% V) g+ E/ e- G) _/ H2 t
  25.                                 Q <= fifo_array(RD_PTR);+ O7 ?' p' q+ p# C/ \
  26.                                 -- move pointer 5 f6 t8 e! I; p& H+ B- m0 U
  27.                                 if RD_PTR=fmax then
    & R7 }8 g+ i7 `, z. \6 N  ?% M
  28.                                         RD_PTR <= 0;
    1 s. Q, O% x: {( w* R4 _$ H
  29.                                 else RD_PTR <= RD_PTR + 1;5 [4 H% M! E) z" r6 f2 L
  30.                                 end if;# K, k1 C, P0 @# [
  31.                         end if;' D4 R9 r8 Z5 H
  32.                 end if;
    2 T# Y) Z  \' \: n* n, G
  33.         end process;1 b3 u2 s# ^# J+ p/ Y
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-29 07:30 AM , Processed in 0.111007 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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