hdlbits.01xz.net /Circuits/Sequential Logic/Finite State Machines/Simple FSM 3(synchronous reset)

就是把上一个里面对reset边沿的判断挪到 always@(*)里面处理

module top_module(
    input clk,
    input in,
    input reset,
    output out); //
    
    reg [3:0] state, next_state;
    parameter A = 4'b0001;
    parameter B = 4'b0010;
    parameter C = 4'b0100;
    parameter D = 4'b1000;
    
    // State transition logic
    always @(*) begin
        next_state = A;
        if(reset) begin
            next_state = A;
        end else begin
            case (state)
                A: begin
                    if(in)
                        next_state = B;
                    else
                        next_state = A;
                end
                B: begin
                    if(in)
                        next_state = B;
                    else
                        next_state = C;
                end
                C: begin
                    if(in)
                        next_state = D;
                    else
                        next_state = A;
                end
                D: begin
                    if(in)
                        next_state = B;
                    else
                        next_state = C;
                end
                default: begin
                    next_state = A;
                end
            endcase
        end
    end
    
    // State flip-flops with synchronous reset
    always @(posedge clk) begin
        if(reset)
            state = A;
        else
            state = next_state;
    end
    
    // Output logic
    always @(*) begin
        if(state == D)
            out = 1;
        else 
            out = 0;
    end
endmodule
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB代码: ```matlab function w = taylorwin(n, nbar, sll) % TAYLORWIN returns a Taylor window of length n with sidelobe level sll % nbar is the width of mainlobe % Usage: w = taylorwin(n, nbar, sll) % % Ref: J. F. Kaiser, "Nonrecursive digital filter design using I0-sinh window function," Proc. IEEE Int. Symp. Circuits and Systems, pp. 20-23, Apr. 1974. % % Written by: Z. Shi, 2019/10/15 % Check inputs if nargin < 3 sll = 30; end if nargin < 2 nbar = ceil(n/4); end if nargin < 1 error('Not enough input arguments'); end if mod(n, 2) == 0 error('Window length must be odd'); end % Normalize nbar nbar = nbar/(n-1); % Calculate beta parameter beta = pi*sll/20; k = 0:n-1; a = nbar^2 - (k-n/2).^2; b = sqrt(a)./nbar; beta2 = beta^2; temp = sqrt(1 - beta2*a)/beta; w = sin(beta * b)./b .* temp; % Set DC to 1 w((n+1)/2) = 1; end ``` C/C++代码: ```c++ #include <iostream> #include <cmath> using namespace std; double bessi0(double x) { double ax,ans,a; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=1.0+y*(3.5156229+y*(3.0899424+y*(1.2067492 +y*(0.2659732+y*(0.360768e-1+y*0.45813e-2))))); } else { y=3.75/ax; ans=(exp(ax)/sqrt(ax))*(0.39894228+y*(0.1328592e-1 +y*(0.225319e-2+y*(-0.157565e-2+y*(0.916281e-2 +y*(-0.2057706e-1+y*(0.2635537e-1+y*(-0.1647633e-1 +y*0.392377e-2)))))))); } return ans; } double taylorwin(double *w, int n, int nbar, double sll) { // Check inputs if (n%2 == 0) { cout << "Window length must be odd." << endl; return 0; } // Normalize nbar double nbar_norm = (double)nbar/(double)(n-1); // Calculate beta parameter double beta = M_PI*sll/20.0; for (int i = 0; i < n; i++) { double k = i - (n-1)/2.0; double a = nbar_norm*nbar_norm - k*k; double b = sqrt(a)/nbar_norm; double beta2 = beta*beta; double temp = sqrt(1 - beta2*a)/beta; double bes = bessi0(beta*b); w[i] = bes*temp; } // Set DC to 1 w[(n-1)/2] = 1; return 1; } int main() { int n = 101; int nbar = 20; double sll = 30; double w[n] = {0}; taylorwin(w, n, nbar, sll); for (int i = 0; i < n; i++) { printf("%f\n", w[i]); } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值