设计一个波浪计数器

用Verilog实现九进制波浪计数器

首先,创建新的Verilog文本,打入如下代码

module ligulei7(RST   ,  CLK   ,    CNTVAL);

input RST   , CLK   ;
output [3:0] CNTVAL;  

reg [3:0] CNTVAL;
reg state;
localparam a1 = 1'b0;
localparam a2 = 1'b1;
localparam CNT_MAX_VAL = 9;

always @ (posedge CLK or negedge RST) begin
if(!RST) 
  CNTVAL <= 0;
  else begin
   case(state)
    a1:if(CNTVAL < CNT_MAX_VAL) begin
       CNTVAL <= CNTVAL+1'b1;
       state <= a1;
       end
       else begin
        CNTVAL <= CNTVAL-1'b1;
        state <= a2;
       end

    a2:if(CNTVAL == CNT_MAX_VAL) begin
       CNTVAL <= CNTVAL-1'b1;
       state <= a2;
       end
       else if(CNTVAL < CNT_MAX_VAL) begin
       if(CNTVAL == 0) begin
        CNTVAL <= CNTVAL+1'b1;
        state <= a1;
       end
        else begin
         CNTVAL <= CNTVAL-1'b1;
         state <= a2;
        end
       end
     endcase
  end
end

endmodule

之后进行完全编译,建立新的vwf画波形图,得到波形图如下:
九进制波浪计数器波形图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android 应用中生成动态波浪,可以使用自定义视图和 ValueAnimator 来实现动画效果。以下是一个简单的实现步骤: 1.创建一个自定义视图,继承自 View 类。 2.在自定义视图中实现一个方法来绘制波浪。 3.在 Activity 中创建一个 ValueAnimator 对象,用于生成动画效果。 4.在 ValueAnimator 的 onAnimationUpdate() 方法中更新波浪的状态,并调用自定义视图的 invalidate() 方法来重绘波浪。 以下是一个简单的实现代码: ``` public class WaveView extends View { private Path path; private Paint paint; private float phase; private float amplitude; private float frequency; public WaveView(Context context) { super(context); init(); } public WaveView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { path = new Path(); paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLUE); amplitude = 20; frequency = 1; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); float midY = height / 2f; path.reset(); float x = 0f; float y = 0f; while (x < width) { y = (float) (midY + amplitude * Math.sin(2 * Math.PI * frequency * (x / width) + phase)); if (x == 0) { path.moveTo(x, y); } else { path.lineTo(x, y); } x += 20; } path.lineTo(width, height); path.lineTo(0, height); path.close(); canvas.drawPath(path, paint); } public void setAmplitude(float amplitude) { this.amplitude = amplitude; invalidate(); } public void setFrequency(float frequency) { this.frequency = frequency; invalidate(); } public void setPhase(float phase) { this.phase = phase; invalidate(); } } public class MainActivity extends AppCompatActivity { private WaveView waveView; private ValueAnimator animator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); waveView = (WaveView) findViewById(R.id.wave_view); animator = ValueAnimator.ofFloat(0f, 1f); animator.setRepeatCount(ValueAnimator.INFINITE); animator.setDuration(2000); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); waveView.setAmplitude(20 + 20 * value); waveView.setFrequency(1 + 2 * value); waveView.setPhase(value * 2 * (float) Math.PI); } }); animator.start(); } @Override protected void onDestroy() { animator.cancel(); super.onDestroy(); } } ``` 在这个例子中,WaveView 类是自定义视图,它负责绘制波浪。MainActivity 类是 Activity,它创建了一个 ValueAnimator 对象并启动了一个线程来更新波浪的状态,并调用 WaveView 类的 invalidate() 方法来重绘波浪。注意,在 onDestroy() 方法中停止 ValueAnimator。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值