Accelerate

How do I make it so that for each second a rigidbody is moving, it’s speed is incremented by 1?
And when no buttons are being pressed, it decrements the speed by 1 each second?
So far I have this, which is not working properly.

EDIT: When I press W i want it to each it’s maximum speed in 10 seconds, then when i let go of W it will decrement it’s speed down to 0 in 10 seconds, so that it is standing still.
ALSO, if i was going in a direction when holding A, then let go of A and immediately press D, how do I make it so that the velocity doesn’t get slowed down after switching directions? (If it has to, as minimal as possible?).

using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {
	Rigidbody rb;

	public Vector3 velocity;

	public float speed;

	float maxSpeed = 10f;
	float acceleration = 1f;
	void Start () {
		rb = GetComponent<Rigidbody> ();
		speed = 1f;

	}

	void FixedUpdate () {
		velocity = rb.velocity;
		float h = Input.GetAxis ("Horizontal");
		float v = Input.GetAxis ("Vertical");

		Vector3 movement = new Vector3 (h, 0.0f, v);

		rb.AddForce (movement * speed);

		if (h != 0 || v != 0) {
			Accelerate ();
		}

		if (h == 0 && v == 0) {
			Decelerate ();
		}

	}


	void Accelerate() {
		speed += acceleration * Time.deltaTime;
		speed = Mathf.Clamp (speed, 1, maxSpeed);
		transform.Translate (speed * Time.deltaTime, 0, 0, Space.World);
	}

	void Decelerate() {
		speed -= acceleration * Time.deltaTime;
		speed = Mathf.Clamp (speed, 1, maxSpeed);
		transform.Translate (speed * Time.deltaTime, 0, 0, Space.World);
	}
}

I would just get the key and use Time.deltaTime to increase the speed and use else to decease the speed.

psudo-code:

public float speed;
public float time;

If(Input.GetKey(keycode.Space)){

	time += speed * Time.deltaTime;

}else{time -= speed * Time.deltaTime;}