【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26

2023-11-17

目录

写在前面

Finite State Manchines

Fsm serialdata

Fsm serialdp

Fsm hdlc

Design a Mealy FSM

ece241 2014 q5a

ece241 2014 q5b

2014 q3fsm

2014 q3bfsm


写在前面

HDLBits 刷题来到了最为重要的一部分---有限状态机,都说 Verilog 设计的精髓就是状态机的设计,可见状态机设计的重要性,通过三十多道的状态机的练习,可以更加熟悉状态机设计的要点,通常都设计为三段式,这样设计的状态机层次清晰且易于设计,时序上更为易懂。以下的解题方法不一定为最佳解决方案,有更好的方法欢迎提出,共同学习,共同进步!

Finite State Manchines

Fsm serialdata

设计一个有限状态机,可以识别何时在串行比特流中正确接收字节,请添加一个数据路径,该数据路径将输出正确接收的数据字节。out_byte 在完成时需要有效,并且是1,否则就不在乎。

请注意,串行协议首先发送最低有效位。

module top_module(
    input         clk,
    input         in,
    input         reset,    // Synchronous reset
    output [7:0]  out_byte,
    output        done
); 
//状态机状态申明
parameter  IDLE       =  12'b000000000001; 
parameter  START      =  12'b000000000010; 
parameter  BIT_ONE    =  12'b000000000100; 
parameter  BIT_TWO    =  12'b000000001000; 
parameter  BIT_THREE  =  12'b000000010000; 
parameter  BIT_FOUR   =  12'b000000100000; 
parameter  BIT_FIVE   =  12'b000001000000; 
parameter  BIT_SIX    =  12'b000010000000; 
parameter  BIT_SEVEN  =  12'b000100000000; 
parameter  BIT_EIGHT  =  12'b001000000000; 
parameter  STOP       =  12'b010000000000; 
parameter  WAIT       =  12'b100000000000;

reg  [11:0]   state;
reg  [11:0]   next_state;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) begin
	if (reset) begin
		state <= IDLE;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		IDLE: begin
			if (~in) begin
				next_state = START;
			end
			else begin
				next_state = IDLE;
			end
		end
		START: begin
			next_state = BIT_ONE;
		end
		BIT_ONE: begin
			next_state = BIT_TWO;
		end
		BIT_TWO: begin
			next_state = BIT_THREE;
		end
		BIT_THREE:begin
			next_state = BIT_FOUR;
		end
		BIT_FOUR: begin
			next_state = BIT_FIVE;
		end
		BIT_FIVE: begin
			next_state = BIT_SIX;
		end
		BIT_SIX: begin
			next_state = BIT_SEVEN;
		end
		BIT_SEVEN: begin
			next_state = BIT_EIGHT;
		end
		BIT_EIGHT: begin
			if (in) begin
				next_state = STOP;
			end
			else begin
				next_state = WAIT;
			end
		end
		WAIT: begin
			if (in) begin
				next_state = IDLE;
			end
			else begin
				next_state = WAIT;
			end
		end
		STOP: begin
			if (in) begin
				next_state = IDLE;
			end
			else begin
				next_state = START;
			end	
		end
		default: begin
			next_state = IDLE;
		end
	endcase
end 

//状态机第三段,结果输出,组合逻辑
always @(posedge clk) begin
	if (reset) begin
		done     <= 'd0;
		out_byte <= 'd0;
	end
	else begin
        case(next_state)
			IDLE: begin
				done     <= 'd0;
				out_byte <= 'd0;				
			end
			START: begin
				done     <= 'd0;
				out_byte <= 'd0;
			end
			BIT_ONE: begin
				done        <= 'd0;
				out_byte[0] <= in; 
			end
			BIT_TWO: begin
				done        <= 'd0;
				out_byte[1] <= in; 
			end
			BIT_THREE: begin
				done        <= 'd0;
				out_byte[2] <= in; 
			end
			BIT_FOUR: begin
				done        <= 'd0;
				out_byte[3] <= in; 
			end
			BIT_FIVE: begin
				done        <= 'd0;
				out_byte[4] <= in; 
			end
			BIT_SIX: begin
				done        <= 'd0;
				out_byte[5] <= in; 
			end
			BIT_SEVEN: begin
				done        <= 'd0;
				out_byte[6] <= in; 
			end
			BIT_EIGHT: begin
				done        <= 'd0;
				out_byte[7] <= in; 
			end
			WAIT: begin
				done     <= in;
				out_byte <= out_byte;
			end
			STOP: begin
				done     <= 'd1;
				out_byte <= out_byte;
			end
			default: begin
				done     <= 'd0;
				out_byte <= 'd0;
			end
		endcase
	end
end

endmodule

Fsm serialdp

我们希望将奇偶校验添加到串行接收器。奇偶校验在每个数据字节后添加一个额外的位。我们将使用奇偶校验,其中接收的9位中的1s数必须是奇数。例如,101001011满足奇偶校验(有 5 个 1秒),但001001011则不满足奇偶校验。

更改 FSM 和数据路径以执行奇数奇偶校验。仅当正确接收到一个字节并且其奇偶校验通过时才置位完成的信号。喜欢串行接收器 FSM,此 FSM 需要识别起始位,等待所有 9 个(数据和奇偶校验)位,然后验证停止位是否正确。如果停止位未按预期出现,则 FSM 必须等到找到停止位后再尝试接收下一个字节。

为您提供了以下模块,可用于计算输入流的奇偶校验(它是具有重置功能的TFF)。预期用途是应为它提供输入位流,并在适当的时间重置,以便计算每个字节中的1位数。

module top_module(
    input         clk,
    input         in,
    input         reset,    // Synchronous reset
    output [7:0]  out_byte,
    output        done
); 
//状态机状态申明
parameter  IDLE       =  13'b0000000000001; 
parameter  START      =  13'b0000000000010; 
parameter  BIT_ONE    =  13'b0000000000100; 
parameter  BIT_TWO    =  13'b0000000001000; 
parameter  BIT_THREE  =  13'b0000000010000; 
parameter  BIT_FOUR   =  13'b0000000100000; 
parameter  BIT_FIVE   =  13'b0000001000000; 
parameter  BIT_SIX    =  13'b0000010000000; 
parameter  BIT_SEVEN  =  13'b0000100000000; 
parameter  BIT_EIGHT  =  13'b0001000000000;
parameter  PARITY_BIT =  13'b0010000000000;
parameter  STOP       =  13'b0100000000000; 
parameter  WAIT       =  13'b1000000000000;

reg  [12:0]   state;
reg  [12:0]   next_state;
reg           odd;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) begin
	if (reset) begin
		state <= IDLE;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		IDLE: begin
			if (~in) begin
				next_state = START;
			end
			else begin
				next_state = IDLE;
			end
		end
		START: begin
			next_state = BIT_ONE;
		end
		BIT_ONE: begin
			next_state = BIT_TWO;
		end
		BIT_TWO: begin
			next_state = BIT_THREE;
		end
		BIT_THREE:begin
			next_state = BIT_FOUR;
		end
		BIT_FOUR: begin
			next_state = BIT_FIVE;
		end
		BIT_FIVE: begin
			next_state = BIT_SIX;
		end
		BIT_SIX: begin
			next_state = BIT_SEVEN;
		end
		BIT_SEVEN: begin
			next_state = BIT_EIGHT;
		end
		BIT_EIGHT: begin
			next_state = PARITY_BIT;
		end
		PARITY_BIT: begin
			if (in) begin
				next_state = STOP;
			end
			else begin
				next_state = WAIT;
			end
		end
		WAIT: begin
			if (in) begin
				next_state = IDLE;
			end
			else begin
				next_state = WAIT;
			end
		end
		STOP: begin
			if (in) begin
				next_state = IDLE;
			end
			else begin
				next_state = START;
			end	
		end
		default: begin
			next_state = IDLE;
		end
	endcase
end 

//状态机第三段,结果输出,组合逻辑
always @(posedge clk) begin
	if (reset) begin
		out_byte <= 'd0;
		done <= 'd0;
	end
	else begin
		case(next_state)
			IDLE: begin
				out_byte <= 'd0;
				done <= 'd0;
			end
			START: begin
				out_byte <= 'd0;
				done <= 'd0;
			end
			BIT_ONE: begin
				out_byte[0] <= in;
				done <= 'd0;
			end
			BIT_TWO: begin
				out_byte[1] <= in;
				done <= 'd0; 
			end
			BIT_THREE: begin
				out_byte[2] <= in;
				done <= 'd0;
			end
			BIT_FOUR: begin
				out_byte[3] <= in;
				done <= 'd0;
			end
			BIT_FIVE: begin
				out_byte[4] <= in;
				done <= 'd0;
			end
			BIT_SIX: begin
				out_byte[5] <= in;
				done <= 'd0; 
			end
			BIT_SEVEN: begin
				out_byte[6] <= in;
				done <= 'd0;
			end
			BIT_EIGHT: begin
				out_byte[7] <= in;
				done <= 'd0; 
			end
			PARITY_BIT: begin
				out_byte <= out_byte;
				done <= 'd0;
				
			end
			WAIT: begin
				out_byte <= out_byte;
				done <= 'd0;
			end
			STOP: begin
				out_byte <= out_byte;
				if (odd=='d1) begin
					done <= 'd1;	
				end
				else begin
					done <= 'd0;
				end
			end
			default: begin
				out_byte <= 'd0;
				done <= 'd0;
			end
		endcase
	end
end
// always @(posedge clk) begin
// 	if (reset) begin
// 		done <= 'd0;
// 	end
// 	else if (next_state==STOP && odd=='d1) begin
// 		done <= 'd1;
// 	end
// 	else begin
// 		done <= 'd0;
// 	end
// end

wire   rst;  
assign rst = (reset == 1'b1 || next_state == IDLE || next_state == START);

parity u_parity(
	.clk        (clk		),
    .reset      (rst     	),
    .in         (in			),
    .odd        (odd		)
);

endmodule

Fsm hdlc

同步 HDLC 成帧涉及解码连续的位数据流,以查找指示帧(数据包)开始和结束的位模式。看到 6 个连续的 1(即01111110)是一个指示帧边界的“标志”。为了避免数据流意外包含“标志”,发送方在每5个连续的1之后插入一个零,接收方必须检测并丢弃。如果连续有 7 个或更多个 1,我们还需要发出错误信号。

创建一个有限状态机来识别这三个序列:

  • 0111110:需要丢弃一个位的信号(丢弃)。
  • 01111110:标记帧的开头/结尾(标志)。
  • 01111111...: 错误 (7 或更多 1 ) (错误)。

重置 FSM 时,它应处于行为类似于上一个输入为 0 的状态。

下面是一些示例序列,用于说明所需的操作。

module top_module(
    input       clk,
    input       reset,    // Synchronous reset
    input       in,
    output      disc,
    output      flag,
    output      err
);

parameter  IDLE       =  10'b0000000001; 
parameter  BIT_ONE    =  10'b0000000010; 
parameter  BIT_TWO    =  10'b0000000100; 
parameter  BIT_THREE  =  10'b0000001000; 
parameter  BIT_FOUR   =  10'b0000010000; 
parameter  BIT_FIVE   =  10'b0000100000; 
parameter  BIT_SIX    =  10'b0001000000; 
parameter  STOP       =  10'b0010000000; 
parameter  DIS        =  10'b0100000000;
parameter  ERROR      =  10'b1000000000;

reg  [9:0]   state;
reg  [9:0]   next_state;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) begin
	if (reset) begin
		state <= IDLE;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		IDLE: begin
			if (in) begin
				next_state = BIT_ONE;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_ONE: begin
			if (in) begin
				next_state = BIT_TWO;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_TWO: begin
			if (in) begin
				next_state = BIT_THREE;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_THREE: begin
			if (in) begin
				next_state = BIT_FOUR;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_FOUR: begin
			if (in) begin
				next_state = BIT_FIVE;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_FIVE: begin
			if (in) begin
				next_state = BIT_SIX;
			end
			else begin
				next_state = DIS;
			end
		end
		BIT_SIX: begin
			if (~in) begin
				next_state = STOP;
			end
			else begin
				next_state = ERROR;
			end
		end
		STOP: begin
			if (in) begin
				next_state = BIT_ONE;
			end
			else begin
				next_state = IDLE;
			end
		end
		DIS: begin
			if (in) begin
				next_state = BIT_ONE;
			end
			else begin
				next_state = IDLE;
			end
		end
		ERROR: begin
			if (in) begin
				next_state = ERROR;
			end
			else begin
				next_state = IDLE;
			end
		end
		default: begin
			next_state = IDLE;
		end
	endcase
end

//状态机第三段,结果输出,时序逻辑非阻塞赋值
always @(posedge clk) begin
	if (reset) begin
		disc <= 'd0;
		flag <= 'd0;
		err  <= 'd0;
	end
	else begin
		case(next_state)
			DIS: begin
				disc <= 'd1;
				flag <= 'd0;
				err  <= 'd0;
			end
			STOP: begin
				disc <= 'd0;
				flag <= 'd1;
				err  <= 'd0;							
			end
			ERROR: begin
				disc <= 'd0;
				flag <= 'd0;
				err  <= 'd1;
			end
			default: begin
				disc <= 'd0;
				flag <= 'd0;
				err  <= 'd0;
			end
		endcase
	end
end
 
endmodule

Design a Mealy FSM

实现一个 Mealy 型有限状态机,该状态机在名为 x 的输入信号上识别序列“101”。您的 FSM 应具有一个输出信号 z,当检测到“101”序列时,该信号被置位到逻辑-1。您的 FSM 还应具有低电平有效异步复位。您的状态机中可能只有 3 个状态。您的 FSM 应识别重叠序列。

module top_module (
    input      clk,
    input      aresetn,    // Asynchronous active-low reset
    input      x,
    output     z 
);

//状态定义
parameter  IDLE       =  4'b0001;
parameter  BIT_ONE    =  4'b0010;
parameter  BIT_TWO    =  4'b0100;
parameter  BIT_THREE  =  4'b1000;

//现态和次态
reg  [3:0]   state;
reg  [3:0]   next_state;

//状态机第一段,初始化状态,时序逻辑非阻塞赋值
always @(posedge clk or negedge aresetn) begin
	if (!aresetn) begin
		state <= IDLE;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		IDLE: begin
			if (x) begin
				next_state = BIT_ONE;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_ONE: begin
			if (~x) begin
				next_state = BIT_TWO;
			end
			else begin
				next_state = BIT_ONE;
			end
		end
		BIT_TWO: begin
			if (x) begin
				next_state = BIT_THREE;
			end
			else begin
				next_state = IDLE;
			end
		end
		BIT_THREE: begin
			if (x) begin
				next_state = BIT_ONE;
			end
			else begin
				next_state = BIT_TWO;
			end
		end
		default: begin
			next_state = IDLE;
		end
	endcase
end

//状态机第三段,结果输出,组合逻辑
assign z = (next_state==BIT_THREE);

endmodule

ece241 2014 q5a

设计一个单输入一输出串行2的补码器摩尔状态机。输入(x)是一系列位(每个时钟周期一个),从数字的最低有效位开始,输出(Z)是输入的2的补码。机器将接受任意长度的输入数字。该电路需要异步复位。释放重置时开始转换,断言重置时停止转换。

module top_module (
    input       clk,
    input       areset,
    input       x,
    output      z
); 

parameter  MSB    =  3'b001;
parameter  OUT_1  =  3'b010;
parameter  OUT_0  =  3'b100;

reg  [2:0]     state;
reg  [2:0]     next_state;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk or posedge areset) begin
	if (areset) begin
		state <= MSB;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		MSB: begin
			if (x) begin
				next_state = OUT_1;
			end
			else begin
				next_state = MSB;
			end
		end
		OUT_1: begin
			if (x) begin
				next_state = OUT_0;
			end
			else begin
				next_state = OUT_1;
			end
		end
		OUT_0: begin
			if (~x) begin
				next_state = OUT_1;
			end
			else begin
				next_state = OUT_0;
			end
		end
		default: begin
			next_state = MSB;
		end
	endcase
end

//状态机第三段,结果输出,组合逻辑
assign z = (state==OUT_1);

endmodule

ece241 2014 q5b

利用独热码编写一下的米利状态机。

module top_module (
    input       clk,
    input       areset,
    input       x,
    output      z
); 

parameter  A  =  2'b01;
parameter  B  =  2'b10;

reg  [1:0]     state;
reg  [1:0]     next_state;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk or posedge areset) begin
	if (areset) begin
		state <= A;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		A: begin
			if (x) begin
				next_state = B;
				z = 'd1;
			end
			else begin
				next_state = A;
				z = 'd0;
			end
		end
		B: begin
			next_state = B;
			if (x) begin
				z = 'd0;
			end
			else begin
				z = 'd1;
			end
		end
	endcase
end

endmodule

2014 q3fsm

module top_module (
    input       clk,
    input       reset,   // Synchronous reset
    input       s,
    input       w,
    output      z
);

parameter  IDLE =  5'b00001;
parameter  A    =  5'b00010;
parameter  B    =  5'b00100;
parameter  C    =  5'b01000;
parameter  D    =  5'b10000;

reg  [4:0]    state;
reg  [4:0]    next_state;
reg  [10:0]   cnt;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) begin
	if (reset) begin
		state <= IDLE;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	case(state)
		IDLE: begin
			if (s) begin
				next_state = A;
			end
			else begin
				next_state = IDLE;
			end
		end
		A: begin
			next_state = B;
		end
		B: begin
			next_state = C;
		end
		C: begin
			next_state = D;
		end
		D: begin
			next_state = B;
		end
		default: begin
			next_state = IDLE;
		end
	endcase
end

always @(posedge clk) begin
	if (reset) begin
		cnt <= 'd0;
	end
	else begin
		case(next_state)
			IDLE: begin
				cnt <= 'd0;
			end
			A: begin
				cnt <= 'd0;
			end
			B: begin
				if (w) begin
					cnt <= 'd1;
				end
				else begin
					cnt <= 'd0;
				end
			end
			C: begin
				if (w) begin
					cnt <= cnt + 'd1;
				end
				else begin
					cnt <= cnt;
				end
			end
			D: begin
				if (w) begin
					cnt <= cnt + 'd1;
				end
				else begin
					cnt <= cnt;
				end
			end
		endcase
	end
end

assign z = (state==D && cnt=='d2);

endmodule

2014 q3bfsm

给定如下所示的状态分配表,实现有限状态机。重置应将 FSM 重置为状态 000。

module top_module (
    input      clk,
    input      reset,   // Synchronous reset
    input      x,
    output     z
);

parameter  A  =  3'b000;
parameter  B  =  3'b001;
parameter  C  =  3'b010;
parameter  D  =  3'b011;
parameter  E  =  3'b100;

reg  [2:0]  state;
reg  [2:0]  next_state;

//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) begin
	if (reset) begin
		state <= A;
	end
	else begin
		state <= next_state;
	end
end

//状态机第二段,状态跳转,阻塞赋值
always @(*) begin
	next_state = state;
	case(state)
		A: begin
			if (x) begin
				next_state = B;
			end
			else begin
				next_state = A;
			end
		end
		B: begin
			if (x) begin
				next_state = E;
			end
			else begin
				next_state = B;
			end
		end
		C: begin
			if (x) begin
				next_state = B;
			end
			else begin
				next_state = C;
			end
		end
		D: begin
			if (x) begin
				next_state = C;
			end
			else begin
				next_state = B;
			end
		end
		E: begin
			if (x) begin
				next_state = E;
			end
			else begin
				next_state = D;
			end
		end
		default: begin
			next_state = A;
		end
	endcase
end

//状态机第三段,结果输出,组合逻辑
assign z = (state==D) || (state==E);

endmodule
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26 的相关文章

  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • Verilog 奇怪的仿真结果综合后

    我面临一个奇怪的问题 该代码适用于简单的 ALU 仅将感兴趣的代码粘贴到此处 always posedge clk or posedge rst begin if rst 1 begin mul valid shr 3 b000 end e
  • 模加法器输出显示没有变化

    输出波形显示无变化sum dif burrow and out 即使增加延迟时间后 输出仍然没有变化 这应该像 mod 加法器一样工作 如加 10 和 2 并且 mod 3 给出输出零 CODE module Mod adder a b p
  • Vivado 比特流消息:违反规​​则 (LUTLP-1) 组合循环

    我在串流时遇到问题 该项目旨在创建一个占空比为 1 2 的时钟 综合和实现过程中没有任何问题 我尝试了几种方法来解决它 但他们的表现并不好 module clock div clk clk out input clk output reg
  • 「Verilog学习笔记」游戏机计费程序

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module game count input rst n 异位复位信号 低电平有效 input clk 时
  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • 信号连接到以下多个驱动器

    我尝试运行以下命令并收到此错误 这是 Verilog 代码 module needle input referrence input penalty output index 7 0 inout input itemsets input r
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 使用forever和always语句

    以下两个代码都会生成一个时钟 我需要知道除了时钟生成之外 永远循环是否还有其他用途 我只在时钟一代中遇到过永远 如果只是为了这个目的 那岂不是毫无用处 initial begin clk 0 forever begin 5 clk clk
  • Verilog 最佳实践 - 递增变量

    我绝不是 Verilog 专家 我想知道是否有人知道这些增加值的方法中哪一种更好 抱歉 如果这个问题太简单了 Way A 在组合逻辑块中 可能在状态机中 some condition count next count 1 然后在一个连续块中
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 如何使用 don't cares 参数化 case 语句?

    我有一条称为输入的电线 我想检测前导的数量 我正在尝试创建一个模块 该模块使用下面的 case 语句根据前导零的数量更改输出数据 然而 输入的大小是可参数化的 如果 X 是固定值 4 我将创建一个 case 语句 case input 4
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • 自定义类型——结构体、枚举、联合

    一 结构体 我们知道 数组是将相同类型的元素放在一起 类似于数组 结构体是将相同或不同的元素放在一起 eg struct example example是结构体名 可以省略 但不建议省略 内部的是结构体成员 int a char c flo
  • 冲量在线创始人刘尧:以信创软硬件结合场景为突破口“占山为王”

    数据大爆炸的时代 发展信创 保证数据的安全与流通便成为刻不容缓的议题 专注于数据智能互联解决方案的科技创新企业冲量在线 致力于促进数据生产要素在社会间的互联互通 构建可信 安全 隐私 公平 高效的 数据互链网 作为隐私计算结合信创的先行者
  • php简单密码验证txt,php用户名和密码的简单验证

    5 php页面提交form表单 username password 5 1 php页面接收form表单 并进行处理 设置用户名和密码 arr user array user pwd arr pwd array user gt 1111 pw
  • React 生命周期

    React 类组件的生命周期 就是组件从创建到消耗的过程 只有类组件才有生命周期 分为 挂载阶段 更新阶段 卸载阶段 挂载阶段 钩子函数 constructor 创建组件时 最先执行 作用 初始化 state 创建 Ref 使用 bind
  • 单机版kubernetes

    Kubernetes 集群的搭建是有一定难度的 官方安装推荐了MiniKube作为单机调试 学习 1 centos安装 1 1 先决条件 安装VirtualBox KVM Note Minikube 也支持 vm driver none 选
  • 【leecode】小练习(简单8题)

    def twoSum nums target 给定 nums 2 7 11 15 target 9 因为 nums 0 nums 1 2 7 9 所以返回 0 1 type nums List int type target int rty
  • nfs漏洞的处理:目标主机showmount -e信息泄露(CVE-1999-0554)

    文章目录 前言 一 漏洞内容 二 配置现状 1 nfs server节点 etc exports文件的配置 2 client节点执行showmount e 测试 三 nfs server节点增加访问控制的配置 1 etc hosts all
  • Node.js中Redirect拼接参数方法,带参数重定向

    一 在Node js里req redirect 里拼接URL是这样的 client1 req query client client1是你获取到的需要拼接的变量 res redirect allNode client client1 注意冒
  • openstack实战之使用sysprep工具封装windows7镜像

    openstack实战之使用sysprep工具封装windows7镜像 在openstack云平台环境下 使用sysprep封装windows7系统主要目的是清理虚拟机的SID 避免使用同一windows7镜像克隆出的虚拟机出现相同的SID
  • hive数据表去重方法

    1 hive 0 8 0数据表去重方法 问题描述 hive的外部表test中 在若干字段上存在重复现象 现在需要将若干字段上值相同的多条记录 只保其中留一条 舍弃其余的 解决思路 1 group by的方法 首先新建与test表完全相同的新
  • 单点登录的解析和代码实现

    单点登录 系统简介 Http协议 web应用采用browser server架构 http作为通信协议 http是无状态协议 浏览器的每一次请求 服务器会独立处理 不与之前或之后的请求产生关联 这个过程用下图说明 三次请求 响应对之间没有任
  • 生成图片验证码的两种实现方式

    最近工作中 需求让新加一个图片验证码功能 其实这个功能之前自己写过 想必跟大家现在心里想到的实现方式一样 要么是通过servlet实现请求操作 要么是通过get请求实现操作 然后在后台通过session存储图片上的字符串 和之后前台请求过来
  • 什么是测试开发工程师?

    什么是测试开发工程师 测试开发工程师 Software Development Engineer in Test 简称SDET 是指那些既可以称作是开发人员 同时也负责软件开发阶段和测试周期的测试工作的技术人员 一个专业的SDET更关注软件
  • Matlab模拟仿真模糊PID(Fuzzy)

    研究项目 模糊PID Fuzzy 的仿真测试 研究内容 本篇文章主要研究如何通过matlab软件实现模糊PID Fuzzy 的仿真测试 研究材料 matlab 2017a软件 基本概念和定义 模糊量 如E EC 论域 上下限 240 240
  • Numpy中的argsort函数详解

    Numpy中的argsort函数返回的是每个元素的排序序号 但是不是很容易理解 gt gt gt dd mat 4 5 1 gt gt gt dd argsort matrix 2 0 1 一开始的时候想不明白为什么是2 0 1而不是1 2
  • 链表作业 3:多项式加法

    题目描述 实现两个一元n次多项式的加法 例如P A x 3x2 5x5 7 P B 2x2 6x3 x5 4x6 求P A P B 输入 每行是两个用空格隔开的整数m n 分别代表多项式的系数和指数 以输入0 0作为结尾 输出 每次完成一个
  • vue elementUI 日期组件 默认当前月份第一天 与 当前月份最后一天

    1 template中如下代码
  • (java)宠物商店,接口实现

    基本思想 使用一个接口作为宠物商店的标准 只要满足接口内的方法都可以实现接口进入宠物商店 本例子用yellVoice 方法作为标准 整体代码 import java util Scanner 导入Sacnner类 interface Pet
  • 画出有3个节点的树和有3个结点的二叉树的所有不同的形态

    画的难看了点
  • 【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26

    目录 写在前面 Finite State Manchines Fsm serialdata Fsm serialdp Fsm hdlc Design a Mealy FSM ece241 2014 q5a ece241 2014 q5b 2